linux中"写"功能的问题

Dum*_*lin 2 c c++ linux concurrency

我试图在Linux下编写2个服务器/客户端程序,它们通过命名管道进行通信.问题是,有时当我尝试从服务器写入不再存在的管道(客户端已停止)时,我收到"资源暂时不可用"错误,服务器完全停止.

我知道这是由于在打开fifo chanel时使用O_NONBLOCK参数引起的,指示程序通常会等到它可以再次写入文件的位置,但有没有办法停止这种行为,而不是停止整个程序是否出现问题(写命令不应该返回-1广告程序继续正常)?

另一个奇怪的事情是,只有在ide(eclipse)之外运行程序时才会出现此错误.如果我在eclipse中运行这两个程序,则错误时write函数只返回-1并且程序继续正常运行.

Pla*_*pus 6

如果您希望write()在错误(并设置errnoEPIPE)时返回-1 而不是在管道的写入端未连接时完全停止服务器,则必须忽略SIGPIPE信号signal( SIGPIPE, SIG_IGN ).