C - 如何检查用户是否已将文本文件发送到标准输入

C - How to check if user has sent text file to stdin

我目前正在做我的学校项目,想知道是否有任何方法可以判断用户是否已将 <textfile.txt 写入终端。

像这样:./project <textfile.txt

我的项目将文本文件中的所有行读取到 stdin 并通过 scanf 与它们一起工作。但是当我不使用 <textfile.txt "thing" 时,它会在没有数据的情况下启动。相反,我希望它写一个错误并停止程序。

非常感谢。

您可以使用 isatty(3) 来检测您的标准输入是否是终端。

你可以使用 fstat(2) on STDIN_FILENO, e.g. to detect redirection or pipelines.

或(在 Linux 上)readlink(2) /proc/self/fd/0 , see proc(5)

我建议接受一些程序参数来覆盖这种自动检测。阅读 this.

请注意,重定向和 globbing 是由 shell 完成的,请参阅 this

在 unix 系统上,您可以检查 stdin 是否指终端:

if (isatty(0)) {
    fprintf(stderr, "input was not redirected\n");
    exit(EXIT_FAILURE);
}