繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM