无名管道系统调用

#include #include #include #include #include #include #define MAX 256 #define DELAY 1 int main() { pid_t pid; int pipe_fd[2]; //定义两个文件描述符 char buf[MAX]; //定义缓冲区大小 const char data[] = "Pipe Test Program"; //定义数据 int real_read,real_write; memset((void*)buf,0,sizeof(buf)); //清空内存区 if(pipe(pipe_fd) < 0) //创建管道 { printf("pipe create error/n"); exit(1); } if((pid = fork()) == 0) //创建一子进程 {//子进程关闭写描述符,并通过子进程暂停1s等待父进程已关闭相应的读描述符 close(pipe_fd[1]); sleep(DELAY * 3); if((real_read = read(pipe_fd[0],buf,MAX)) > 0) //子进程读取管道内容 { printf("%d bytes read from the pipe is '%s'/n",real_read,buf); } close(pipe_fd[0]); //关闭子进程读描述符 exit(0); } else if(pid > 0) {//父进程关闭读描述符,并通过使使父进程暂停1s等待子进程已关闭相应的写描述符 close(pipe_fd[0]); sleep(DELAY); if((real_write = write(pipe_fd[1],data,strlen(data))) != -1) //父进程写入管道内容 { printf("Parent wrote %d bytes:'%s'/n",real_write,data); } close(pipe_fd[1]); //关闭父进程写描述符 waitpid(pid,NULL,0); //收集子进程退出信息 exit(0); } }
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章