[英]Get file descriptor if isatty(1) is 1
我试图确定我的程序是否以非交互方式运行。 所以,如果执行看起来像这样./foo.c <script.sh
我如何获取script.sh并用fopen打开它? 这是argv [1],如果是,我如何摆脱“ <”?
我当前的代码
if(isatty(1) == 1)
FILE *file;
file = fopen(argv[1], "r");
您不需要,stdin(fd 0)已经打开,因此您可以阅读,这是getchar和gets的默认值(由于缓冲区溢出问题,您不应该使用它)。 使用<stdio.h>
然后stin,stdout和sterr是预定义的FILE * stream,因此您可以使用fgets等更安全的函数,而无需将文件打开到stdin(或stdout)。
安排重定向是POSIX Shell的工作,如果foo是程序,则foo < script.sh
提供foo
参数。 argv [1]是命令行上命令的第一个参数,在您的示例中,仅定义了argv [0]。
如果是非交互式调用,则需要从终端读取/写入,则可以打开/ dev / tty。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.