IPC进程间通信问题笔记
来源:互联网 发布:黑客帝国矩阵革命在线 编辑:程序博客网 时间:2024/04/30 00:56
author:sun
-------------------------------------------------------------------------------------------------------
IPC
1.管道是进程间通信的一种方式。但有两种局限性:
1)数据只能在一个方向上流动
2)只能在具有公共祖先的进程之间使用。父进程创建管道,子进程通过管道继承其所有属性,不指向真实内存,只复制描述符本身。
管道是由调用pipe函数创建的int pipe(int pipefd[2]); 传进一个数字。 返回两个文件描述符:pipefd[0]读 pipefd[1]写
filefd[1] 的输出是 filfd[0]的输入,实现了进程间的信息流向。
对于父到子的管道,父进程关闭读端fd[0],子进程关闭写端fd[1]。子到父的管道与此相反。
当管道一端关闭之后:
1)读一个写端被关闭的通道时,所有数据被读取之后,read返回0,以示到达了结尾。
2)写一个读端被关闭的通道时,产生信号SIGPIPE。若忽略或捕捉并从处理程序中返回,write返回出错。
2.FIFO有名管道---硬盘上
int mkfifo(const char *pathname, mode_t mode);
pathname相当于管道名,mode是权限 成功返回0 一般文件函数都可打开它(open write close read)
用途: 1)由shell命令以便将数据从一条管道线传送到另一条,无需创建临时文件。
2)用于客户进程-服务器进程应用程序中,以便传递数据
若用write写一个尚未为读而打开的FIFO,产生信号SIGPIPE。
若FIFO的最后一个写进程关闭了该FIFO,则该FIFO的读进程产生一个文件结束标志。
共享内存:
1.int shmget(key_t key, size_t size, int shmflg); 创建共享内存 成功返回共享存储ID
key标识符 0为私有名,说明共享内存不想被共享
size是该共享存储端的长度(单位:字节) shmflg权限位
2.int shmctl(int shmid, int cmd, struct shmid_ds *buf); 成功返回0
cmd参数指定下列命令中一种,使其在shmid指定的段上执行
IPC_STAT 获取共享内存属性,并放在buf指向的结构中。
IPC_RMID 从系统中删除共享内存
3.void *shmat(int shmid, const void *shmaddr, int shmflg); 成功返回指向共享内存的指针
shmaddr 为0,连接到内核的第一个可用地址
4.int shmdt(const void *shmaddr); 断开与共享内存联系
shmaddr是调用shmat的返回值
共享内存具有独立性。只有删除才会消失,进程结束并不影响共享内存。共享内存只有在调用的进程空间使用,若此时有其他进程调用需attach,此地址为虚拟地址。
消息队列
1.消息队列是消息的链接表,存放在内核中,并由消息队列标志符标志。
2.int msgget(key_t key, int msgflg); 创建消息队列
返回消息队列ID。 用于接受发送消息。
3.int msgctl(int msqid, int cmd, struct msqid_ds *buf); 创建是对队列执行操作
cmd参数: IPC_STAT获取属性 IPC_SET修改,先获取当前值记录下来修改要改变的,其他如之前的
IPC_RMID 删除
4.int msgsnd(int msqid, const void *msgp, size_t msgsz, int msgflg);成功返回0
将数据放到消息队列中。发送消息 msgp指向消息内容
5.ssize_t msgrcv(int msqid, void *msgp, size_t msgsz, long msgtyp,int msgflg);
接收消息。从队列中取用消息。 msgsz数据缓冲区长度。
msgtyp: == 0 返回队列中的第一个消息 > 0 返回消息队列消息类型为type的第一个消息
< 0 返回队列中消息类型值小于或等于msgtyp绝对值的消息
0 0
- IPC进程间通信问题笔记
- 进程间通信IPC
- 进程间通信IPC
- 进程间通信IPC
- 进程间通信IPC
- IPC进程间通信
- IPC进程间通信
- 进程间通信 IPC
- IPC进程间通信
- 进程间通信IPC
- IPC进程间通信
- IPC进程间通信
- 进程间通信(IPC)
- 进程间通信IPC
- 进程间通信IPC
- 进程间通信IPC
- 进程间通信 ---IPC
- 进程间通信IPC
- VB动态调用类模块中的函数的方法
- 安卓中intent切换界面与传递数值
- OJ 引用传递 地址传递
- 59. Contains Duplicate II
- 僵尸进程 wait waitpid
- IPC进程间通信问题笔记
- 2016-01-22 FFC
- DDX_Control 与 DDX_Text 区别
- 【VC++】没有与参数列表匹配的 重载函数 AfxMessageBox
- 1070: [SCOI2007]修车 费用流
- 浅谈JAVA解析XML的方法
- KNN算法
- 指纹解锁(系统类)__真机
- 修改Tomcat Connector运行模式,优化Tomcat运行性能