使用管道进行进程间通信

时间:2011-07-04 02:27:58

标签: c unix process pipe

我想也许这是一个显而易见的问题,但我只想问问你们。

我正在使用管道系统调用进行父子进程通信,以创建一个未命名的管道。

我的子进程需要收集一些信息并将其发送给其父级。我的问题是:

  1. 我是否只能使用写入和读取功能发送和接收字符串,对吧?我不得不忘记发送结构。
  2. 如果上一个问题的回答是“是”,那么将所有信息传递给父进程的正确方法是多次调用函数写入和读取?
  3. 非常感谢!

1 个答案:

答案 0 :(得分:2)

你可以write()read() struct就好了;使用指向struct的指针作为buf参数。当您想要在不遇到问题的同一台机器上运行的进程之间执行此操作时,需要对可移植表示进行编组/解组,以确保在任何地方都能以相同的方式理解值。这包括识别数据“数据包”的开始和结束,因为管道实际上并不具有数据包的概念:如果您所做的只是编写一系列相同的struct s,那么您可以{ {1}}他们和读者可以依靠write()返回0来表示系列的结尾;但是如果你还需要发送其他信息,那么你需要一个框架协议来说“接下来是什么样的read()”,“接下来是一个字符串”等等。