前言:
IPC , 进程间通讯,是指进程间通过 ipc 组件进行通讯的方式。
基本/通用 IPC:
匿名管道 pipe
适用范围:仅限相互有关系的进程之间,比如父子进程
Demo:
#include <stdio.h>
#include <unistd.h>
...
int p[2];
...
if (pipe(p) == -1) exit(1);
switch( fork() )
{
case 0: /* in child */
close( p[0] );
dup2( p[1], 1);
close P[1] );
exec( ... );
exit(1);
default: /* in parent */
close( p[1] );
dup2( P[0], 0 );
close( p[0] );
break;
}
...
优缺点:优点是简单,缺点是要求进程间必须在代码层面有关联,依赖于fork函数。
命名管道 named pipe
消息队列 message queue (system V & posix)
信号量 Sempohore
信号 Signal
共享内存 shared memory
速度最快的 ipc 方式是 共享内存 (shared memory) ,需要信号量协助完成进程间同步访问共享内存区域,否则会导致竞争关系
参考:
Chapter 7 Interprocess Communication (System Interface Guide)