如果isatty(1)为1,则获取文件描述符

时间:2014-06-01 21:19:57

标签: c file-descriptor

我正在尝试确定我的程序是否以非交互方式运行。 因此,如果执行看起来像./foo.c <script.sh,我如何获得script.sh并用fopen打开它?这是argv [1],如果是,我该如何摆脱“&lt;”?

我当前的代码

if(isatty(1) == 1)
     FILE *file;
     file = fopen(argv[1], "r");

1 个答案:

答案 0 :(得分:1)

你不需要,stdin(fd 0)已经打开,所以你可以阅读它,它是getchar和gets的默认值(你不应该使用它)缓冲区溢出问题)。使用<stdio.h>然后stin,stdout和sterr是预定义的FILE *流,因此您可以使用更安全的函数,如fgets,而无需将文件打开到stdin(或stdout)。

如果foo是一个程序,那么POSIX shell的工作就是安排重定向 然后foo < script.sh不向foo提供任何参数。 argv [1]是第一个参数 命令行上的命令,在您的示例中,只定义了argv [0]。

如果是非交互式调用,需要从终端读/写,则可以打开/ dev / tty。