1
我有一个程序通过管道输入标准输入数据; someapp | myprogram
如何检测输入上的破损管道?
我希望read
在破损管道上返回负值;它似乎并非如此。主循环看起来像这样:
int rdsum = 0;
int rdsize = 0;
do
{
rdsize = read(STDIN_FILENO, buf, BUFSIZE);
if(rdsize > 0)
{
//[operations on the buffer]
rdsum += rdsize;
}
else if(rdsize == 0)
{
usleep(100000);
}
else return 0;
}
while(rdsum < blocksize);
当return 0;
时,程序将直接退出。或者至少它会,如果它发生了......
如果someapp
在someapp | myprogram
结束,或者被杀害,myprog
还活着,出现在ps
列表。 什么是正确的方法来检测喂养应用程序死亡/结束/被杀害,并在这种情况下戒烟?
哦...该死的,我花了这么多年来写了数百个非阻塞的'read()',而不是一个阻塞(RTOS的世界),一旦我写一个阻塞的我完全忘记它的行为。 .. 谢谢。 – 2014-11-24 10:45:28