4.进程间IPC

  • 1.管道
    这里写图片描述
    (1).如果所有指向管道写端的文件描述符都关闭了(管道写端的引用计数等于0),而仍有进程从管道读端读数据,那么管道中剩余的数据被读取后,read会返回0,
    (2).如果有指向管道写端的文件描述符没有关闭,而持有管道写端的进程没有向管道写数据,这是进程从管道读数据,那么管道中剩余的数据被读取后,会被阻塞

(3).当指向管道读端的文件描述符都关闭,读端引用计数为0,仍有进程向管道内写入数据,那么该进程会收到SIGPIPE信号,导致进程异常终止。
(4)管道的读端并没有关闭,而没有进程从管道中读取数据,这是不断有进程向管道写入数据,满了之后write会阻塞
当count加到65535时说明管道已写满不再写入,等待读端从管道内读取数据之后才继续写入,因此可以知道管道的大小为65536个字节,也就是32K。

  • 有名管道fifo文件特性
mkfifo命令创建管道文件
prw-rw-r-- 1 allen allen    0 14 09:57 hello
文件属性前边的p代表文件属性,表示管道
文件大小是0
  • 共享内存
shmget() //创建指定大小的共享内存,并返回ID号
char *buf = shmat(id, NULL, 0)将内核对象维护的内存挂在到指定的线性地址,之后拷贝数据然后解除挂载

ipcs -m 查看当前共享内存段

  • 消息队列
int msgget(key_t key, int flags);
//发送消息到消息队列
int msgsnd(int msqid, const void * msgp, size_t msgsz, int msgflg);
//获取消息
ssize_t msgrcv(int msqid, void * msgp, size_t msgsz, long msgtyp, int msgflg);
//查看、设置、删除、ipc内核对象
int msgctl(int msqid, int cmd, struct msqid_ds *buf);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值