我有一个所有我的子进程都使用的管道,但是在孩子使用管道与父对话之前我需要清除它以便父进程正确地读取它。 C中是否有一个简单的函数来执行此操作?
答案 0 :(得分:8)
“清除”管道的方法是从中读取,直到缓冲区为空。这对你没有帮助。我猜你真正的问题是父母可能会读取从多个客户端混合的数据。您的问题有两种简单的解决方案。
始终写入长度小于PIPE_BUF
个字节的消息,并在一次调用write
时执行此操作。这将确保对管道的写入是原子的。
为每个子进程使用单独的管道。在服务器端,使用线程或使用select
或poll
的非阻塞IO。同样地,您可以使用Unix域套接字,并让每个客户端连接到套接字(这实际上只是创建单独管道的另一种方式)。