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