IPC(进程间通信)

常用IPC有:

1:管道 

2:命名管道(FIFO)

3:共享存储

4:套接字

5:信号量

6:消息队列

7:信号

管道 只允许亲缘进程间的通讯。

命名管道(FIFO) 除了亲缘进程可以通讯外,非亲缘进程也可以通讯。

共享内存 多个进程可以访问同一块内存空间,是最快的IPC方式。在进程间传递数据时无须任何内存的拷贝 。可以在亲缘和非亲缘的进程间使用。

套接字 最通用的进程间通讯方式,它提供了一种让不同机器上进程间通讯方式。 消息队列 可以用在非亲缘关系的进程之间使用

信号量(semaphore) 主要是线程间和亲缘和非亲缘的进程间的同步手段,不做数据传输之用。

消息队列 可以用在非亲缘关系的进程之间使用

信号(signal) 亲缘进程和非亲缘进程都可以, 也可以进程自己给自己递送信号。

命名管道程序:

 1 int main()
 2 {
 3     pid_t pid;
 4     int fd[2];
 5     char line[100];
 6     if(pipe(fd)<0)
 7     {
 8         printf("pipe error\n");
 9     }
10     if((pid = fork())<0)
11     {
12         printf("fork error\n");
13     }
14     else if(0 == pid)
15     {
16         close(fd[1]);
17         read(fd[0],line,11);
18         printf("%s",line);
19         exit(0);
20     }
21     else
22     {
23         close(fd[0]);    
24         write(fd[1],"hello word\n",11);
25     }
26 }

 

共享存储允许两个或多个进程共享一给定的存储区。因为数据不需要在客户机和服务器之间复制,所以这是最快的一种I P C。使用共享存储的唯一窍门是多个进程之间对一给定存储区的同步(互斥访问)存取。若服务器将数据放入共享存储区,则在服务器做完这一操作之前,客户机不应当去取这些数据,

通常,信号量(无亲缘关系的进程间)被用来实现对共享存储存取的同步。

void* mmap ( void * addr , size_t length , int prot , int flags , int fd , off_t offset ) mmap在进程地址空间创建一个映射。它既可以把一个文件映射到内存,也可以映射一块内存,实现进程间内存共享。

一旦创建了一个共享存储段,进程就可调用shmat将其连接到它的地址空间中

转载于:https://www.cnblogs.com/be-m/p/4340051.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值