3.管道通信
1.无名管道 pipe 没有实际的文件,只是在内核区域分配一段内存空间来模拟管道,pipe创建无名管道会得到两个文件描述符,一个用来读,一个用来写。 int pipe(int pipefd[2]);//创建管道文件 int fds[2]; int ret=pipe(fds);//fds[0]---读文件描述符 fds[1]---写文件描述符,读取管道文件的时候如果管道中没有数据,则read会阻塞,无名管道只适用于父子进程。 #include <stdio.h> #include <unistd.h> int main() { //创建管道文件 int fds[2]; int ret = pipe(fds); //创建进程 pid_t pid=fork(); if(pid==0){ //关闭读文件描述符 close(fds[0]); //子进程写数据 write(fds[1],"hello world",12); close(fds[1]); } if(pid>0){ //关闭写文件描述符 close(fds[1]); //父进程读取数据 char buf[128]; read(fds[0],buffer,sizeof(buffer)); printf("%s\n",buffer); close(fds[0]); } return 0; } 2.有名管道