gpt4 book ai didi

c++ - 如何检查我的程序是否有数据通过管道传输到其中

转载 作者:可可西里 更新时间:2023-11-01 18:15:29 24 4
gpt4 key购买 nike

我正在编写一个应该通过标准输入读取输入的程序,所以我有以下结构。

FILE *fp=stdin;

但是如果用户没有将任何东西传送到程序中,这就会挂起,我如何检查用户是否真的像管道一样将数据传送到我的程序中

gunzip -c file.gz |./a.out #should work
./a.out #should exit program with nice msg.

谢谢

最佳答案

由于您使用的是文件指针,因此您需要 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;
}

实际上,这是很长的路要走。简短的方法是不使用文件指针:

#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;
}

几个标准的 Unix 程序执行此检查以修改它们的行为。例如,如果您将 ls 设置为提供漂亮的颜色,那么如果您将其标准输出通过管道传输到另一个程序,它将关闭这些颜色。

关于c++ - 如何检查我的程序是否有数据通过管道传输到其中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2564503/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com