2014025663《嵌入式程序设计》第七周学习总结

一.管道

1.管道的概念

管道是单向的、先进先出的,它把一个进程的输出和另一个进程的输入连接在一起。

一个进程(写进程)在管道的尾部写入数据,另一个进程(读进程)从管道的头部读出数据。

数据被一个进程读出后,将被从管道中删除,其它读进程将不能再读到这些数据。

管道提供了简单的流控制机制,进程试图读空管道时,进程将阻塞。同样,管道已经满时,进程再试图向管道写入数据,进程将阻塞

管道包括无名管道和有名管道两种,前者用于父进程和子进程间的通信,后者可用于运行于同一系统中的任意两个进程间的通信。

 

2.无名管道

无名管道创建:intpipe(int filedis[2]);

 当一个管道建立时,它会创建两个文件描述符:

 filedis[0] 用于读管道,

 filedis[1] 用于写管道

 

管道用于不同进程间通信。通常先创建一个管道,再通过fork函数创建一个子进程,该子进程会继承父进程所创建的管道

 

(1)创建管道pipe

(2)读管道read

(3)写管道write

(4)关闭管道close

 

二.msgsnd()函数和msgrcv()函数

msgrcv/msgsnd为linux系统中异步或进程间通信的一种机制,这两个函数主要用于操作特定的消息队列。msgrcv()可以从消息队列中读取消息,msgsnd()将一个新的消息写入队列。

msgsnd/msgrcv系统调用

编辑

功能描述

msgrcv()可以从消息队列中读取消息,msgsnd()将一个新的消息写入队列。
消息队列上进行收发消息。为了发送消息,调用进程对消息队列进行写入时必须有写权能。接收消息时必须有读权能。
 

用法

#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/msg.h>
 

函数原型

int msgsnd(int msqid, const void *msgp, size_t msgsz, int msgflg);
ssize_t msgrcv(int msqid, void *msgp, size_t msgsz, long msgtyp, int msgflg);
posted @ 2017-06-03 18:09  王雨淳  阅读(99)  评论(0编辑  收藏  举报