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);
}
我目前正在做我的学校项目,想知道是否有任何方法可以判断用户是否已将 <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);
}