【问题标题】:c - check for when nothing is piped to stdinc - 检查何时没有任何东西通过管道传输到标准输入
【发布时间】:2011-02-11 19:07:26
【问题描述】:

基本上,我试图在调用程序时检查标准输入中是否有任何内容,所以如果我有另一个名为 output 的文件写入标准输出,那么 ./output | ./program 应该可以工作,./program 应该退出并出现错误

【问题讨论】:

    标签: c stdin pipe


    【解决方案1】:

    在 POSIX 中,您可以使用isatty

    【讨论】:

      【解决方案2】:

      isatty 检查 tty,不是管道。请改用fstat(STDIN_FILENO, &sb) 并检查S_ISFIFO(sb.st_mode)

      要检查是否有任何“在”标准输入中可以读取的内容,请使用 poll(2),事件掩码为 POLLIN

      【讨论】:

      • 据我所知,如果程序正在从 tty 读取,OP 希望生成错误,因此 isatty 是一个很好的答案。两个输出 |程序和程序
      • 另外我不确定你可以测试管道输入。
      • @lhf:我刚刚给出了如何测试管道的方法。 (它确实有点依赖于实现。如果管道机制使用像 DOS 那样的临时文件,那么这当然不会触发。)
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-07-05
      • 1970-01-01
      • 2015-01-18
      • 2021-02-28
      • 1970-01-01
      • 2014-02-07
      相关资源
      最近更新 更多