linux网络编程-进程间通信——管道


/***********************************    

    进程间通信有无名管道、命名管道、消息队列、信号量等,这里主要写了关于无名管道的使用方法。
    无名管道创建函数为pipe,创建的管道读、写两端通过参数fd传出,fd[0]和fd[1]分别代表了读和写,由于管道是半双工(就像自来水管一样,同一时刻只能流向一个方向),因此,一个进程要写数据,就必须把读的端口关闭,而读数据的进程,就必须把写的端口关闭。pipe的返回值表示是否创建成功,返回值-1表示创建失败。
    代码中创建了子进程写数据,父进程读取数据。

***********************************/  

 1 #include<stdio.h>
 2 #include<stdlib.h>
 3 #include<string.h>
 4 #include<unistd.h>
 5 #include<sys/types.h>
 6 int main()
 7 {
 8     int result = -1;
 9     int fd[2], nbytes;
10     pid_t pid;
11     char string[] = "你好,管道";
12     char readbuffer[80] = {0};
13 
14     int *write_fd = &fd[1];
15     int *read_fd = &fd[0];
16 
17     result = pipe(fd);
18     if(-1 == result)
19     {
20         printf("建立管道失败\n");
21         return -1;
22     }
23 
24     pid = fork();
25     if(-1 == pid)
26     {
27         printf("fork 进程失败\n");
28         return -1;
29     }
30     if(0 == pid)//子进程写数据
31     {
32         close(*read_fd);
33         result = write(*write_fd, string,strlen(string));
34         return 0;
35     }
36     else//父进程读数据
37     {
38         close(*write_fd);
39         nbytes = read(*read_fd, readbuffer, sizeof(readbuffer));
40         printf("收到%d个数据,内容为:%s\n", nbytes, readbuffer);
41     }
42 }

 

posted @ 2022-02-19 21:37  Parker_Zhou  阅读(79)  评论(0)    收藏  举报