如何捕获 Control D 信号?

新手上路,请多包涵

我想在我的程序中捕获 Ctrl + D 信号并为其编写信号处理程序。我怎样才能做到这一点?我正在使用 C 语言 并使用 Linux 系统。

原文由 Ryan 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 664
1 个回答

正如其他人已经说过的那样,要处理 Control + D ,请处理“文件结尾”。

Control + D 是用户与您视为标准输入的伪文件之间的一段通信。这并不意味着具体的“文件结尾”,而是更一般地说“刷新我到目前为止输入的输入”。刷新意味着在程序中对标准输入的任何 read() 调用都会返回自上次刷新以来输入的输入长度。如果该行不为空,则输入对您的程序可用,尽管用户尚未键入“return”。如果该行为空,则 read() 返回零,这被解释为“文件结尾”。

因此,当使用 Control + D 结束程序时,它仅在行首起作用,或者如果您执行两次(第一次刷新,第二次 read() 返回零)。

试试看:

 $ cat
foo
   (type Control-D once)
foofoo (read has returned "foo")
   (type Control-D again)
$

原文由 Pascal Cuoq 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题