linux 简单的命名管道

来源:互联网 发布:软件发短信 编辑:程序博客网 时间:2024/05/05 04:10

命名管道,使用双向通信,要么分时复用,要么创建2个管道一个专业收,一个接。


1.使用mkfifo函数创管道;

2.使用open函数打开管道;

3.使用read,write读写管道,不要两个程序同时对一个管道进行写,这样会阻塞的;

4.使用close关闭打开的文件描述符。

下面使用一个简单的例程实现两个程序之间的通信,大致流程如下:第一个文件为w.c:

#include <stdio.h>#include <stdlib.h>#include <string.h>#include <unistd.h>#include <sys/types.h>#include <sys/stat.h>#include <fcntl.h>int main(){int fd_w = -1;int fd_r = -1;int i = 0;unsigned char val[128];memset(val,0,128);unlink("/tmp/read");unlink("/tmp/write");mkfifo("/tmp/read",0777);mkfifo("/tmp/write",0777);fd_r = open("/tmp/read",O_RDWR);fd_w = open("/tmp/write",O_RDWR);printf("start read and write\n");for (i = 0; i < 100; i++){write(fd_w,"hwllo world",12);read(fd_r,val,12);printf("receive data : %s\n",val);sleep(1);}close(fd_w);close(fd_r);unlink("/tmp/read");unlink("/tmp/write");return 0;}

第二个程序 r.c:

#include <stdio.h>#include <stdlib.h>#include <string.h>#include <unistd.h>#include <sys/types.h>#include <sys/stat.h>#include <fcntl.h>int main(){int fd_w = -1;int fd_r = -1;int i = 0;unsigned char val[128];memset(val,0,128);fd_w = open("/tmp/read",O_RDWR);fd_r = open("/tmp/write",O_RDWR);printf("start read and write\n");for (i = 0; i < 100; i++){write(fd_w,"hiboy world",12);read(fd_r,val,12);printf("receive data : %s\n",val);sleep(1);}close(fd_w);close(fd_r);unlink("/tmp/read");unlink("/tmp/write");return 0;}

编译上面两个程序:

#gcc w.c -o  w#gcc r.c  -o  r
执行上面程序,首先执行w,然后执行r。因为管道是在w程序中创建的。

#./w &#./r

看控制台是否有信息输出。

0 0
原创粉丝点击