Linux进程通信的几种方式

以下将对Linux进程之间的通信方式做个总结(未完,待续):

1,管道和命名管道:本质是一种文件,只存在于内存中。特性为:数据流是单向的,(只能一段写入,另一端读取),只能在亲缘关系的进程间通信,缓冲区大小受限,传输的格式是无字节流的。  可以用于两个进程间的简单通信。命名管道克服了管道只能在亲缘进程间通信的缺点,能在任意进程间通信。

int pipe(int pipefd[2]);

int mknod(const char *pathname, mode_t mode, dev_t dev);

int mkfifo( const char *pathname, mode_t mode );

2,消息队列:由内核维护的一个链表队列。内核提供一个struct msqid_ds *msgque[MSGMNI]向量维护内核的消息队列列表,MSGMNI=128,每一个msqid_ds表示一个消息队列,并通过msqid_ds.msg_first、msg_last维护一个先进先出的msg链表队列,当发送一个消息到该消息队列时,把发送的消息构造成一个msg结构对象,并添加到msqid_ds.msg_first、msg_last维护的链表队列,接收消息的时候也是从msg链表队列尾部查找到一个msg_type匹配的msg节点,从链表队列中删除该msg节点,并修改msqid_ds结构对象的数据。

3,信号:本质是软中断,它提供了一种处理异步事件的方法,也是进程间异步通信的唯一方式。

4,信号量:特殊的变量,程序对该变量的操作均为原子操作,从而实现对共享资源的保护。

5,共享内存:通过使不同进程共享同一块内存区域来实现进程间的通信。

6,套接字;


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值