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

如何为C程序添加检查:仅允许指定重定向命令执行并输出错误提示

问题描述

我编写的C程序中,main()函数通过以下方式调用function函数:
function(stdin, stdout);
当前main函数代码如下:

int main() {
    function(stdin, stdout);      
    return 0;
}

我想添加检查逻辑:当用户执行命令不是./program < input > output时,打印错误信息。

解决方案

可以通过检查stdin和stdout是否为终端设备(TTY)来实现需求——只有当两者都被重定向到文件(而非终端)时,才允许程序继续执行;否则打印错误信息并退出。

具体实现:

  1. 引入头文件<unistd.h>,它提供的isatty()函数可以判断文件描述符是否指向终端。
  2. 在main函数开头加入检查逻辑:
    • 用isatty(STDIN_FILENO)判断标准输入是否是终端,返回非0表示是终端。
    • 用isatty(STDOUT_FILENO)判断标准输出是否是终端,返回非0表示是终端。
  3. 只要任意一个是终端,就说明用户没有同时做输入输出重定向,此时输出错误提示并终止程序。

修改后的完整代码示例:

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

// 假设function是已定义的目标函数
void function(FILE* in, FILE* out);

int main() {
    // 检查是否同时重定向了输入和输出
    if (isatty(STDIN_FILENO) || isatty(STDOUT_FILENO)) {
        fprintf(stderr, "错误:请使用重定向命令,格式为 ./program < input > output\n");
        exit(EXIT_FAILURE);
    }

    function(stdin, stdout);      
    return 0;
}

补充说明:

  • STDIN_FILENO(值为0)和STDOUT_FILENO(值为1)是标准输入、输出对应的文件描述符。
  • isatty()函数在文件描述符对应终端时返回非零值,否则返回0。
  • 错误信息输出到stderr而非stdout,这样即使用户重定向了标准输出,错误提示也能直接显示在终端上。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 09:57:38