You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让C程序仅在存在输入重定向时执行特定任务?

判断标准输入是否来自文件重定向的C语言实现

要判断程序的标准输入是来自终端交互还是文件重定向,你可以用POSIX标准的isatty()函数,它能检测给定的文件描述符是否关联到终端设备。

实现步骤

  1. 引入头文件:需要包含<unistd.h>,这个头文件提供了isatty()和STDIN_FILENO的定义。
  2. 判断逻辑:isatty(STDIN_FILENO)返回非0值时,表示标准输入是终端(无重定向);返回0时,表示标准输入被重定向到了文件或其他非终端设备。

补全后的完整代码

#include <stdio.h>
#include <unistd.h>

int main() {
    // 判断标准输入是否来自文件重定向(非终端)
    if (!isatty(STDIN_FILENO)) {
        // 处理文件输入的逻辑,示例:逐行读取文件内容并输出
        char buffer[1024];
        while (fgets(buffer, sizeof(buffer), stdin) != NULL) {
            printf("从文件读取到:%s", buffer);
        }
    } else {
        // 处理终端交互输入的逻辑,示例:接收用户输入并回显
        printf("请输入内容:");
        char input[100];
        fgets(input, sizeof(input), stdin);
        printf("你输入了:%s", input);
    }
    return 0;
}

额外注意事项

  • STDIN_FILENO是标准输入的文件描述符,固定值为0,直接写0也可以,但用宏定义可读性更强。
  • 若在Windows平台编译,需将isatty()替换为_isatty(),头文件可保持<unistd.h>或改用<conio.h>(不同编译器可能有差异)。
  • 测试验证:直接运行./Terminal会进入终端交互逻辑;执行./Terminal < someFile.txt则会触发文件读取逻辑。

内容的提问来源于stack exchange,提问作者hardStuckProgrammer

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 11:46:08