如何为C程序添加检查:仅允许指定重定向命令执行并输出错误提示
问题描述
我编写的C程序中,main()函数通过以下方式调用function函数:function(stdin, stdout);
当前main函数代码如下:
int main() { function(stdin, stdout); return 0; }
我想添加检查逻辑:当用户执行命令不是./program < input > output时,打印错误信息。
解决方案
可以通过检查stdin和stdout是否为终端设备(TTY)来实现需求——只有当两者都被重定向到文件(而非终端)时,才允许程序继续执行;否则打印错误信息并退出。
具体实现:
- 引入头文件
<unistd.h>,它提供的isatty()函数可以判断文件描述符是否指向终端。 - 在
main函数开头加入检查逻辑:- 用
isatty(STDIN_FILENO)判断标准输入是否是终端,返回非0表示是终端。 - 用
isatty(STDOUT_FILENO)判断标准输出是否是终端,返回非0表示是终端。
- 用
- 只要任意一个是终端,就说明用户没有同时做输入输出重定向,此时输出错误提示并终止程序。
修改后的完整代码示例:
#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
相关产品推荐
相关产品推荐

