进程间通信1(IPC)

pipe---无名管道

mkfifo---有名管道

msgget ----用于创建一个新的或打开一个已经存在的消息队列,此消息队列与key相对应。

msgrcv 功能---从标识符为msqid的消息队列读取消息并存于msgp中,读取后把此消息从消息队列中删除。

msgsnd 功能---将msgp消息写入到标识符为msqid的消息队列。

进程间通信:

不同进程之间传数据、交换信息。

进程间方式:(重点)

  1. 管道(无名管道和命名管道)
  2. 消息队列
  3. 信号量
  4. 共享内存
  5. socket
  6. steams等。

其中socket 和 steams 支持不同主机上的两个进程通信。

pipe 管道(无名管道)

pipe 管道(无名管道)通常指无名管道,是Unix 系统 IPC最古老的形式。

头文件及原型
#include <unistd.h>

int pipe(int pipefd[2]);
特点半双工,只能要么接收数据,要么传输数据。一个读,一个写。 只能用于具有亲缘关系的进程通信,比如:父子进程。 可以看成是特殊文件,它读写可以使用 read、write等函数,但它不是普通文件和系统文件,它是只存在内存中的。

FIFO(命名管道)

FIFO(有名管道)有名管道也叫命名管道,在文件系统目录中存在一个管道文件。 管道文件仅仅是文件系统中的标示,并不在磁盘上占据空间。在使用时,在内存上开辟空间,作为两个进程数据交互的通道。

管道文件的创建 在shell中使用 mkfifo 命令 mkfifo filename mkfifo 函数 (在代码中使用其创建管道文件)

mkfifo 参数 pathname:文件名/文件路径

mode:权限 比如 0600 就是可读可写。

mkfifo 返回值

成功:则返回 0 
失败:返回 -1 , 错误原因存于 errno 中.

mkFIFO使用:

write:

read:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值