Linux环境编程之进程间通信

    进程间通信顾名思义就是进程之间的通信机制,英文简称IPC,进程见通信主要有一下几种方式:

    信号(signal):亲缘进程和非亲缘进程都可以, 也可以进程自己给自己递送信号。
    信号量(semaphore):主要是线程间和亲缘进程间的同步手段,不做数据传输之用。
    命名信号量:可以在非亲缘进程间使用。
    管道:只允许亲缘进程间的通讯。
    命名管道(FIFO):除了亲缘进程可以通讯外,非亲缘进程也可以通讯。

    共享内存:多个进程可以访问同一块内存空间,是最快的IPC方式。在进程间传递数据时无须任何内存的拷贝 。
    套接字:最通用的进程间通讯方式,它提供了一种让不同机器上进程间通讯方式。

 

    1.管道

    管道是半双工的,当需要双向通讯时,需要两个管道。只能用于父子进程和兄弟进程等有亲缘关系的进程。数据写入时,放在管道的结尾。

    #include <unistd.h>
    int pipe(int pipefd[2]);
    pipe用来创建一个管道,这个管道用于父子进程间的通讯。pipefd[0]是管道的读端,pipefd[1]是管道的写端。由于管道是单向的,所有一个进程需要关闭写端或者读端。写端不存在时,读端会收到文件结束符。读端不存在时,写端会收到SIGPIPE信号。成功返回0,失败返回-1.

    缺点:只能用于亲缘进程间通讯。数据读取时,从管道的头开始读取。

    以下是实现代码

 

    2.命名管道(FIFO)

    命名管道可以在所有进程间使用,克服了管道只能在亲缘进程通讯的限制。命名管道与一个路径名相关联,以文件的形式存在于文件系统中。只要能访问该文件的进程就可以使用命名管道。命名管道也是先进先出,虽然以文件形式实现单不支持seek等操作。

    创建FIFO

    #include <sys/types.h>
    #include <sys/stat.h>
    int mkfifo(const char * pathname, mode_t mode)
    第一个参数为路径名,第二个为创建类型。跟create函数的参数一样。进程只要打开这个文件,就可以往这个文件读和写。当多个进程往fif

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值