文档章节

进程间通信

t1234xy4
 t1234xy4
发布于 2016/08/22 17:59
字数 475
阅读 1
收藏 0

【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>>

  • 管道

int pipe(int fd[2]);

只能用户父子进程,且为半双工管道,多用于shell。不能直接设置为非阻塞,需要调用fcntl()。管道发送消息时需要接收端处于接收状态,不然消息发送无效。

  • 有名管道

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

不仅可用于父子进程,亦可用于没有关系进程间通信。

mode 可为: 默认指定 O_CREAT | O_EXCL,指如果存在返回EEXIST错误,不存在则创建管道。

调用open时可以指定非阻塞。

方法一:
fd = open(FIFONAME,O_WRONLY | NONBLOCK,0);
方法二:
int flags;
if(flags = fcntl(fd,F_GETFL,0) < 0)
   err_sys("F_GETFL error!");
flags |= NONBLOCK;
if(fcntl(fd,F_SETFL,flags) < 0)
   err_sys("F_SETFL error!");
  • 消息队列

消息队列是由内核维护的消息链表,拥有写权限的可以向链表中添加消息,拥有读权限的可以从链表中读取消息。消息队列具有随内核持续性,亦即进程发出消息后消亡,消息依旧存在。除非显示的删除消息。同时,消息队列无需接收端处于准备接收状态。

消息队列由链表维护,表头有两个属性:最大消息数、每个消息的最大大小。

打开一个已经存在的消息队列:

#include <mqueue>
mqd_t mq_open(const char* name,int flag);//失败返回-1

name为文件名;

flag : O_RDONLY、O_WRONLY、O_RDWR 之一 | O_CREAT | O_EXCL |O_NONBLOCK。

关闭一个消息队列:

#include<mqueue>
int mq_close(mqd_t mqdes);//返回:成功 0 ,失败 -1

消息队列并不从系统中删除,一个进程终止时,它所有打开着的消息队列都会关闭,但不会从系统中删除。引用计数

从系统中删除队列:

#include <mqueue.h>
int mq_unlink(const char* name); //返回:成功 0 ,失败 -1

每一个消息队列都保存着一个当前打开着描述符的引用计数,

© 著作权归作者所有

t1234xy4
粉丝 0
博文 1
码字总数 475
作品 0
宜昌
私信 提问

暂无文章

OSChina 周四乱弹 —— 浙江台的电话号码倒是记得挺牢

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @巴拉迪维 :《Out On The Streets》 一直不理解北欧人对重金属和死亡摇滚的热情,听完这首歌好像理解了。#今日歌曲推荐# 《Out On The Stre...

小小编辑
今天
5
0
Leetcode PHP题解--D121 21. Merge Two Sorted Lists

D121 21. Merge Two Sorted Lists 题目链接 21. Merge Two Sorted Lists 题目分析 合并两个有序链表。 思路 逐个遍历两个链表,把小的数字塞入数组里。之后再拼起来。 最终代码 <?php/** *...

skys215
今天
5
0
mars-config 动态配置管理

mars-config 码云地址:https://gitee.com/fashionbrot/mars-config 介绍 spring mvc 、springboot 动态配置系统。http 轮训方式 更新 动态配置 软件架构 软件架构说明 后端使用技术 :sprin...

fashionbrot
今天
14
0
女朋友玩吃鸡手游被开挂老哥骗炮,我见义勇为将骗子绳之以法

大家好,我是乔哥。 晚上10点以后下班后我回到自如出租房里面,开始处理公众号粉丝发来的消息,一条一条处理,突然看到了这么几条消息,吸引了我的眼球: 然后我就和这位女粉丝小红(化名)聊...

gzc426
今天
9
0
两款软件

fadetop保护眼睛软件 Snipaste截图软件

伟大源于勇敢的开始
今天
7
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部