1.实现AB进程对话。
a.A进程发送一句话后,B进程接收到打印。然后B进程发送一句话,A进程接收后打印b.重复上述步骤。直到AB接收或者发送完quit后,结束AB进程
#include <head.h> #include <errno.h> int main(int argc, const char *argv[]) { umask(0); //创建有名管道 if(mkfifo("./fifo",0664) < 0) { if(errno != 17)// { perror("mkfifo"); return -1; } } //创建有名管道2 if(mkfifo("./fifo1",0664) < 0) { if(errno != 17)// { perror("mkfifo"); return -1; } } printf("客户端B:\n"); //以读|非阻塞的状态打开 int fd = open("./fifo",O_RDONLY); if(fd < 0) { perror("open"); return -1; } //以写阻塞的状态打开 int fw = open("./fifo1",O_WRONLY); if(fw < 0) { perror("open"); return -1; } char buf[128]; ssize_t res = 0; while(1) { //读管道数据 bzero(buf,sizeof(buf)); res = read(fd,buf,sizeof(buf)); if(res < 0) { perror("read"); return -1; } else if(res == 0) { printf("对方进程结束\n"); break; } printf("A说:%s\n",buf); //向管道写数据 bzero(buf,sizeof(buf)); fgets(buf,sizeof(buf),stdin); buf[strlen(buf)-1]='\0'; if(write(fw,buf,sizeof(buf)) < 0) { perror("read"); return -1; } printf("发送成功\n"); //判断退出条件 if(strcmp(buf,"quit") == 0) { break; } } close(fd); close(fw); return 0; }
#include <head.h> #include <errno.h> int main(int argc, const char *argv[]) { umask(0); //创建有名管道文件 if(mkfifo("./fifo",0664) < 0) { if(errno != 17)//合法错误 { perror("mkfifo"); return -1; } } //创建有名管道 if(mkfifo("./fifo1",0664) < 0) { if(errno != 17)// { perror("mkfifo"); return -1; } } printf("客户端A:\n"); //以只写的方式打开 int fd = open("./fifo",O_WRONLY); if(fd < 0) { perror("open"); return -1; } //以读|非阻塞的状态打开 int fw = open("./fifo1",O_RDONLY); if(fw < 0) { perror("open"); return -1; } char buf[128]; ssize_t res = 0; while(1) { //向管道写数据 fgets(buf,sizeof(buf),stdin); buf[strlen(buf)-1]='\0'; if(write(fd,buf,sizeof(buf)) < 0) { perror("write"); return -1; } printf("发送成功\n"); //读管道数据 bzero(buf,sizeof(buf)); res = read(fw,buf,sizeof(buf)); if(res < 0) { perror("read"); return -1; } else if(res == 0) { printf("对方进程结束\n"); break; } printf("B说:%s\n",buf); //判断退出条件 if(strcmp(buf,"quit") == 0) { break; } } close(fw); close(fd); return 0; }
IO进程线程第五天作业
最新推荐文章于 2024-07-19 17:37:28 发布