我需要用纯C编写的程序在stdin关闭时停止执行。
程序主循环中有不确定的工作量,我无法使用阻塞检查(例如getc()
)(没有数据应该到达stdin - 它只是打开了未知时间)。
我打算在inetd、xinetd或它们的类比实现的网络守护进程中使用所述功能 - 当连接关闭时,它应在stdout上发出数据并正确完成工作。由于它无法在连接终止后停止,因此我的程序被托管服务终止。
我想知道是否可以将fctntl()
与应用于stdin描述符的O_NONBLOCK
标志结合使用,以便在非阻塞模式下使用read()
函数?我是否应该以某种方式使用select()
?
P.S. 数据不应该但可能会到达stdin。非阻塞读取的方法将是问题的答案。