一、管道
本周我们学习了管道 消息队列的传输和接收
1.管道(Pipe)及有名管道(named pipe):管道可用于具有亲缘关系进程间的通信,有名管道,除具有管道所具有的功能外,它还允许无亲缘关系进程间的通信。
2.信息队列(Messge Queue):消息队列的实现包括创建或打开消息队列、添加消息、读取消息和控制消息队列这 4 种操作。其中创建 或打开消息队列使用的函数是 msgget(),这里创建的消息队列的数量会受到系统消息队列数量的限制; 添加消息使用的函数是 msgsnd()函数,它把消息添加到已打开的消息队列末尾;读取消息使用的函数是 msgrcv(),它把消息从消息队列中取走,与 FIFO 不同的是,这里可以指定取走某一条消息;最后控制消 息队列使用的函数是 msgctl(),它可以完成多项功能。
3.特点
①它只能用于具有亲缘关系的进程之间的通信(也就是父子进程或者兄弟进程之间)。
②它是一个半双工的通信模式,具有固定的读端和写端。
③ 管道也可以看成是一种特殊的文件,对于它的读写也可以使用普通的 read()和 write()等函数。但是它不是普通的文件,并不属于其他任何文件系统,并且只存在于内核的内存空间中。
标准管道流 用于文件流模式popen ;原型FILE popen char command char type ; 如果调用成功 则返回一个文件流 如果无法创建则返回NULL 该函数主要用于执行外部程序 command参数是一个指向以NULL结束的shell命令字符串的指针。 其中type参数是用来表示读或者写的 不能同时为读和写 管道将会以参数type的第一个字符代表的方式打开 popen打开的数据管道流可以使用pclose 关闭 popen pclose用于打开和关闭数据流 如果pclose FILE stream 调用失败 则返回 1;注意 在使用pclose时并不是立即关闭管道流 而是等待管道流的管道流进程结束"
msgget()函数的语法要点: