我正在尝试确定我的程序是否以非交互方式运行。
因此,如果执行看起来像./foo.c <script.sh
,我如何获得script.sh并用fopen打开它?这是argv [1],如果是,我该如何摆脱“&lt;”?
我当前的代码
if(isatty(1) == 1)
FILE *file;
file = fopen(argv[1], "r");
答案 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。