1.write
#include<my_head.h> //写程 序 int main(int argc, const char *argv[]) { //创建有名管道1 if(mkfifo("./myfifo", 0664) != 0) { perror("mkfifo error"); return -1; } printf("管道创建成功\n"); //创建有名管道2 if(mkfifo("./myfifo2", 0664) != 0) { perror("mkfifo2 error"); return -1; } printf("管道2创建成功\n"); pid_t pid=-1; pid=fork(); if(pid>0) { //父进程 //打开管道文件 int fd = -1; if((fd= open("./myfifo", O_WRONLY)) == -1) { perror("open error"); return -1; } char buf[128] =""; while(1) { printf("请输入>>"); fgets(buf, sizeof(buf), stdin); buf[strlen(buf)-1] = '\0'; //将数据写入到管道中 write(fd, buf, strlen(buf)); if(strcmp(buf, "quit") == 0) { break; } } #include<my_head.h> //写程 序 int main(int argc, const char *argv[]) { //创建有名管道1 if(mkfifo("./myfifo", 0664) != 0) { perror("mkfifo error"); return -1; } printf("管道创建成功\n"); //创建有名管道2 if(mkfifo("./myfifo2", 0664) != 0) { perror("mkfifo2 error"); return -1; } printf("管道2创建成功\n"); pid_t pid=-1; pid=fork(); if(pid>0) { //父进程 //打开管道文件 int fd = -1; if((fd= open("./myfifo", O_WRONLY)) == -1) { perror("open error"); return -1; } //关闭文件描述符 close(fd); }else if(pid==0) { //子进程 sleep(3); int fd2 = -1; if((fd2 = open("./myfifo2", O_RDONLY)) == -1) { perror("open2 error"); return -1; } char buf2[128] =""; while(1) { bzero(buf2, sizeof(buf2)); //从管道文件中读取数据 read(fd2, buf2, sizeof(buf2)); printf("读取的管道2数据为:%s\n", buf2); if(strcmp(buf2, "quit") == 0) { break; } } close(fd2); }else { perror("fork error"); return -1 ; } wait(NULL); return 0; }
2.read
#include<my_head.h> //读程序 int main(int argc, const char *argv[]) { pid_t pid=-1; pid=fork(); if(pid>0) { //父进程 //打开管道文件 int fd = -1; if((fd = open("./myfifo", O_WRONLY)) == -1) { perror("open error"); return -1; } char buf[128] =""; while(1) { bzero(buf, sizeof(buf)); //从管道文件中读取数据 read(fd, buf, sizeof(buf)); printf("读取的管道1数据为:%s\n", buf); if(strcmp(buf, "quit") == 0) { break; } } //关闭文件描述符 close(fd); }else if(pid==0) { //子进程 int fd2 = -1; if((fd2 = open("./myfifo2", O_RDONLY)) == -1) { perror("open error"); return -1; } char buf2[128] =""; while(1) { printf("请输入>>"); fgets(buf2, sizeof(buf2), stdin); buf2[strlen(buf2)-1] = '\0'; //将数据写入到管道中 write(fd2, buf2, strlen(buf2)); if(strcmp(buf2, "quit") == 0) { break; } } }else { perror("fork error"); return -1 ; } wait(NULL); return 0; }