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 }

浙公网安备 33010602011771号