进程间通信4 今天药忘吃喽~ 2022-07-16 05:22 104阅读 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 赞/ 120 阅读
相关 进程间通信 1 引言 \---- 进程间通信的主要目的是实现同一计算机系统内部的相互协作的进程之间的数据共享与信息交换,由于这些进程处于同一软件和硬件环境下,利用操作系统提供的的编程接口 迷南。/ 2024年02月18日 23:52/ 0 赞/ 83 阅读
相关 进程间通信 进程间通信(IPC,InterProcess Communication)是指在不同进程之间传播或交换信息。 IPC的方式通常有管道(包括无名管道和命名管道)、消息队列、信号 以你之姓@/ 2024年02月18日 20:08/ 0 赞/ 91 阅读
相关 进程间通信 进程间通信(IPC,Inter-Process Communication),是指两个或两个以上的进程之间传递数据或信号的一些技术或方法。进程是计算机系统分配资源的最小单位,每 ゞ 浴缸里的玫瑰/ 2023年01月02日 15:24/ 0 赞/ 195 阅读
相关 进程间通信4 消息队列的读写 写消息队列 函数msgsnd用于向消息队列发送(写)数据.定义在头文件sys/msg.h中 int msgsnd(int msqid, 今天药忘吃喽~/ 2022年07月16日 05:22/ 0 赞/ 105 阅读
相关 进程间通信 进程间通信的基本概念 进程间通信意味着两个不同进程间可以交换数据,操作系统中应提供两个进程可以同时访问的内存空间。 通过管道实现进程间通信 基于管道(P 港控/mmm°/ 2022年05月25日 09:42/ 0 赞/ 391 阅读
相关 进程间通信 程序员必须让拥有依赖关系的进程集协调,这样才能达到进程的共同目标。可以使用两种技术来达到协调。第一种技术在具有通信依赖关系的两个进程间传递信息。这种技术称做进程间通信(inte 谁践踏了优雅/ 2022年01月16日 14:09/ 0 赞/ 400 阅读
相关 进程间通信 转载自:[http://songlee24.github.io/2015/04/21/linux-IPC/][http_songlee24.github.io_2015_04_ 不念不忘少年蓝@/ 2021年09月23日 04:10/ 0 赞/ 529 阅读
相关 进程间通信 进程间通信 1. 前言 2. 使用文件实现进程间的通信 3. 使用管道实现进程间的通信 4. 共享内存 5. 以上三种通信方式的区别 青旅半醒/ 2021年08月30日 22:05/ 0 赞/ 548 阅读
还没有评论,来说两句吧...