【发布时间】:2022-01-20 00:30:47
【问题描述】:
我的目标是有一个程序可以从 C 中的文件重定向中获取用户输入。
$ ./hello < input.txt
但是当没有重定向或参数时,程序会输出一条消息:
$ ./hello
There is nothing to read!
由于文件重定向直接进入标准输入,我使用 scanf 来读取文件的内容。但是,当我在没有重定向的情况下启动程序时,scanf 等待输入,而我的目标是仅在没有任何输出消息的情况下从命令行上的重定向中获取它
【问题讨论】:
-
你想对
cat input.txt | ./hello做什么?您可以查看标准输入是否是终端——POSIX 中的isatty()。但这对管道数据没有帮助。将管道标识为输入并非易事。如果您指定./hello input.txt并且如果没有要读取的参数则反对,这将是微不足道的,并且可以为用户节省一些输入。如果指定了多个名称,您还应该决定该怎么做——不要只忽略多余的名称;要么处理他们,要么抱怨他们的存在。 -
为什么您需要这种对于标准命令行应用程序来说有些不寻常的行为?
-
别再想“去”了。当您通过
./hello < input.txt运行程序时,文件input.txt不会“转到”标准输入。它是标准输入。你可以fseek,倒带,做任何你喜欢的事情。也许您只是想使用isatty,或者您可以尝试寻找并查看stdin是否可寻找,或者您可能想要完全不同的东西。
标签: c command-line