我正在编写一个应该通过stdin读取输入的程序,所以我有以下结构.
FILE *fp=stdin;
Run Code Online (Sandbox Code Playgroud)
但是如果用户没有将任何东西输入到程序中,这只会挂起,我如何检查用户是否实际将数据传输到我的程序中
gunzip -c file.gz |./a.out #should work
./a.out #should exit program with nice msg.
Run Code Online (Sandbox Code Playgroud)
谢谢
由于您正在使用文件指针,因此您需要两者isatty()并fileno()执行此操作:
#include <unistd.h>
#include <stdio.h>
int main(int argc, char* argv[])
{
FILE* fp = stdin;
if(isatty(fileno(fp)))
{
fprintf(stderr, "A nice msg.\n");
exit(1);
}
/* carry on... */
return 0;
}
Run Code Online (Sandbox Code Playgroud)
实际上,这是漫长的道路.简短的方法是不使用文件指针:
#include <unistd.h>
int main(int argc, char* argv[])
{
if(isatty(STDIN_FILENO))
{
fprintf(stderr, "A nice msg.\n");
exit(1);
}
/* carry on... */
return 0;
}
Run Code Online (Sandbox Code Playgroud)
几个标准的Unix程序会检查它们以修改它们的行为.例如,如果你ls设置了漂亮的颜色,如果你把它的标准输出到另一个程序,它将关闭颜色.