C - 如何检查用户是否发送了文本文件stdin

问题描述:

我目前正在研究我的学校项目,并想知道是否有任何方法可以告诉用户是否已将<textfile.txt写入终端。C - 如何检查用户是否发送了文本文件stdin

像这样:./project <textfile.txt

我的项目读取所有从文本文件stdin并通过scanf作品与他们的线。但是当我不使用<textfile.txt“东西”时,它开始时没有数据。相反,我希望它写一个错误并停止该程序。

非常感谢。

+0

出于某种原因,并没有表现出与部分“ Isha

+0

@Isha因为这看起来像一个HTML标签。 – melpomene

+1

你能不能破坏格式? – melpomene

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

您可以在STDIN_FILENO上使用fstat(2),例如,检测重定向或pipelines

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

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

请注意,重定向和通配由shell完成,请参阅this

在UNIX系统上,您可以检查是否stdin指向一个终端:

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