【问题标题】:Redirect stdin to provide no input at all?重定向标准输入以完全不提供输入?
【发布时间】:2014-02-04 19:29:19
【问题描述】:

another question I asked 中,我意识到我想重定向stdin,但它绝对不提供任何输入。例如,我希望对getchar() 的呼叫永远挂起。然后我想通过发送终止信号来终止应用程序。

我尝试了freopen("/dev/null", "r", stdin);,但这不起作用,因为/dev/null 在读取时返回一个EOF,它似乎触发了getchar() 的执行,并且我的程序退出了。

如何将stdin 重定向到根本不读取任何内容?

【问题讨论】:

  • 文件结尾是 Linux/C 世界中的伪字符,通常值为 -1。如果你想等到被杀,从标准输入读取不是这样做的方法。编辑您的问题,或提交另一个问题。

标签: linux stdin kill getchar freopen


【解决方案1】:

在 linux 上,您可以尝试创建一个命名管道:http://linux.die.net/man/3/mkfifo 并从中读取。

但是您最终要达到什么目标?看来一定有更好的办法。

【讨论】:

  • 我喜欢这种方法。我尝试了mkfifo("empty_input", S_IRUSR| S_IWUSR);,然后尝试了freopen("./empty_input", "w", stdin);。我假设这会起作用,但我的mkfifo 调用返回-1 并将errono 设置为EACCES,即“权限被拒绝”
  • 我试过了,对我来说它执行没有错误,它只是挂在open("./empty_input", O_WRONLY|O_CREAT|O_TRUNC, 0666(strace 的输出)上。
  • 我尝试从命令行运行mkfifo empty_input,但似乎在我的操作系统上找不到该命令。这是一个嵌入式 Linux 内核。
  • 是的,mkfifo 似乎没有在某些操作系统(MacOS,...)中实现。你有哪个嵌入式系统?我不确定它是否会改变任何东西,但您可以尝试使用 mknod 代替:mknod("empty_input", S_IFIFO|0600, 0); man7.org/linux/man-pages/man2/mknod.2.html mkfifo command 不存在并不一定意味着什么,IMO。
  • 我编辑了另一个应用程序,看看它何时从stdin 读取,如果它等于一个特殊字符。如果是,那么我在那个应用程序中sleep()
猜你喜欢
  • 2011-04-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-11-04
相关资源
最近更新 更多