c - 如何捕获 Control+D 信号?

标签 c linux unix signals

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

最佳答案

正如其他人已经说过的,要处理 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)
$

关于c - 如何捕获 Control+D 信号?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1516122/

相关文章:

java - Selenium 网格: DevToolsActivePort file doesn't exist (unknown error: Chrome failed to start: exited abnormally)

linux - linux下如何改变微编辑器的背景颜色?

linux - 如何使用 shell 脚本创建数据并将其插入新文件

c - C 程序如何将空格参数传递给 libc system(3) 调用?

c - 地址上的二维 float 组

c - 如何检测是否支持双栈套接字?

java - 从 Java 在后台打开 gnome 终端

无法使用 perl 中的系统命令获取已编译 C 程序执行的标准错误

linux - 导出此代码的 shell 变量输出

c - 除了与函数指针一起使用之外,是否还有在 C 中对函数进行类型定义的目的?