我需要用纯 C 编写的程序在标准输入关闭时停止执行。
在程序主循环中完成了无限期的工作,我无法在那里使用阻塞检查(如getc()
)(没有数据应该到达标准输入 - 它只是在未知时间内保持打开状态)。
我打算使用描述的功能来实现托管在 inetd、xinetd 或其类似物的网络守护进程——它应该在连接保持打开状态时在标准输出上发出数据,并在连接关闭时正确完成工作。现在我的程序被托管服务杀死,因为它在连接终止后不会停止。
我想知道fctntl()
将O_NONBLOCK
标志应用于标准输入描述符是否允许我read()
在非阻塞模式下使用函数?我应该select()
以某种方式使用吗?
PS 数据不是假设的,但可能会到达标准输入。一种非阻塞读出的方式将是该问题的答案。