c - 在同一台机器,信号或 socket 上进行进程间通信,该如何确定?

在我看来signalsocket都可以用来做这项工作,
你怎么决定到底用哪一个?

最佳答案

在工控机上使用信号有点不方便和原始。您应该在Unix套接字(而不是TCP套接字)之间进行选择还有管子。
管道通常更易于编程,因为它们保证write大小下的单个PIPE_BUF是原子的。然而,它们确实有其局限性。例如,当writer比reader快时,当管道缓冲区满时,writer开始阻塞。默认情况下,这个缓冲区的大小约为64k,如果不重新编译内核(至少在Linux中),就无法更改它。管道也是单向的,这意味着您必须在每个进程中保留一对管道,一个用于读取,一个用于写入。
Unix套接字具有可配置的发送缓冲区大小和更高级的编程接口。