进程间通信4 今天药忘吃喽~ 2022-07-16 05:22 93阅读 0赞 ## 消息队列的读写 ## ### 写消息队列 ### 函数msgsnd用于向消息队列发送(写)数据.定义在头文件sys/msg.h中 int msgsnd(int msqid, struct msgbuf *msgp, size_t msgsz, int magflg); msqid: 函数向msgid标识的消息队列发送了一个消息. msgp: msgp指向发送的消息. msgsz: 要发送的消息的大小,不包含消息类型占用的4个字节. magflg: 操作标志位.可以设置为0或IPC_NOWAIT. 如果为0,则当消息队列已满的时候,msgsnd将会阻塞,直到消息可以写进消息队列. 如果为IPC_NOWAIT,当消息队列已满时,msgsnd函数将不等待立即返回. msgsnd函数成功返回0,失败返回-1. 常见错误码: EAGAIN: 消息队列已满. EIDRM: 消息队列已被删除. EACCESS: 无权访问消息队列. ### 读消息队列 ### 读取消息的系统调用为msgrcv(),定义在头文件sys/msg.h中. int msgrcv (int msqid, struct msgbuf *msgp, size_t msgsz, long int msgtyp, int msgflg); msqid: 消息队列描述符. msgp: 读取的消息存储到msgp指向的消息结构中. msgsz: 消息缓冲区的大小. msgtyp: 为请求读取的消息类型. msgflg: 操作标志位. msgflg可以为: IPC\_NOWAIT: 若没有满足条件的消息,调用立即返回. IPC\_EXCEPT: 与msgtyp配合使用,返回队列中第一个类型不为msgtyp的消息. IPC\_NOERROR: 若队列中满足条件的消息内容大于所请求的msgsz字节,则把该消息截断,截断部分被丢弃. ## 获取和设置消息队列的属性 ## 消息对列的属性保存在系统维护的数据结构msqid\_ds中,可通过msgctl获取或设置消息队列的属性.msgctl定义在头文件sys/msg.h中. int msgctl (int msqid, int cmd, struct msqid_ds *buf); msgctl系统调用对msqid标识的消息队列执行cmd操作. 3种cmd操作: IPC\_STAT: 获取消息队列对应的msqid\_ds数据结构将其保存在buf指向的地址空间. IPC\_SET: 设置消息队列的属性,要设置的属性存储在buf中. IPC\_RMID: 从内核中删除msqid标识的消息队列. ## 消息队列与命名管道的比较 ## 和命名管道一样,消息队列进行通信的进程可以是不相关的进程,同时它们都是通过发送和接收的方式来传递数据的。在命名管道中,发送数据用write,接收数据用read,则在消息队列中,发送数据用msgsnd,接收数据用msgrcv。而且它们对每个数据都有一个最大长度的限制。 消息队列的优势: 1、消息队列也可以独立于发送和接收进程而存在,从而消除了在同步命名管道的打开和关闭时可能产生的困难。 2、通过发送消息还可以避免命名管道的同步和阻塞问题,不需要由进程自己来提供同步方法。 3、接收程序可以通过消息类型有选择地接收数据,而不是像命名管道中那样,只能默认地接收。
相关 进程间通信 管道是Unix中最古老的进程间通信的形式。我们把从一个进程连接到另一个进程的一个数据流称为一个“管道“我们之前说进程间通信的本质是让不同的进程看到同一份资源,管道就是其中... 一时失言乱红尘/ 2024年04月25日 20:18/ 0 赞/ 96 阅读
相关 进程间通信 进程间通信(IPC,InterProcess Communication)是指在不同进程之间传播或交换信息。 IPC的方式通常有管道(包括无名管道和命名管道)、消息队列、信号 以你之姓@/ 2024年02月18日 20:08/ 0 赞/ 63 阅读
相关 进程间通信 二、进程间通信方式 线程间通信就是在不同进程之间传播或交换信息,那么不同进程之间存在着什么双方都可以访问的介质呢?进程的用户空间是互相独立的,一般而言是不能互相访问的,唯一的 阳光穿透心脏的1/2处/ 2023年10月17日 15:41/ 0 赞/ 7 阅读
相关 进程间通信 进程间通信(IPC,Inter-Process Communication),是指两个或两个以上的进程之间传递数据或信号的一些技术或方法。进程是计算机系统分配资源的最小单位,每 ゞ 浴缸里的玫瑰/ 2023年01月02日 15:24/ 0 赞/ 170 阅读
相关 进程间通信4 消息队列的读写 写消息队列 函数msgsnd用于向消息队列发送(写)数据.定义在头文件sys/msg.h中 int msgsnd(int msqid, 今天药忘吃喽~/ 2022年07月16日 05:22/ 0 赞/ 94 阅读
相关 进程间通信 进程间通信的基本概念 进程间通信意味着两个不同进程间可以交换数据,操作系统中应提供两个进程可以同时访问的内存空间。 通过管道实现进程间通信 基于管道(P 港控/mmm°/ 2022年05月25日 09:42/ 0 赞/ 366 阅读
相关 进程间通信 程序员必须让拥有依赖关系的进程集协调,这样才能达到进程的共同目标。可以使用两种技术来达到协调。第一种技术在具有通信依赖关系的两个进程间传递信息。这种技术称做进程间通信(inte 谁践踏了优雅/ 2022年01月16日 14:09/ 0 赞/ 381 阅读
相关 进程间通信 转载自:[http://songlee24.github.io/2015/04/21/linux-IPC/][http_songlee24.github.io_2015_04_ 不念不忘少年蓝@/ 2021年09月23日 04:10/ 0 赞/ 505 阅读
相关 进程间通信 进程间通信 1. 前言 2. 使用文件实现进程间的通信 3. 使用管道实现进程间的通信 4. 共享内存 5. 以上三种通信方式的区别 青旅半醒/ 2021年08月30日 22:05/ 0 赞/ 524 阅读
还没有评论,来说两句吧...