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