Linux进程间通信实战:FIFO双向聊天

发布时间:2026/7/10 13:54:34
Linux进程间通信实战:FIFO双向聊天 文件1#include stdio.h #include string.h #include stdlib.h #include sys/types.h #include sys/stat.h #include fcntl.h #include unistd.h #include dirent.h #include sys/wait.h #include pthread.h #include semaphore.h int main(int argc, const char *argv[]) { char fifo1[32]./fifo1.c; int res1access(fifo1,F_OK); if(res1-1) { mkfifo(fifo1,0666); } char fifo2[32]./fifo2.c; #if 1 int res2access(fifo2,F_OK); if(res2-1) { mkfifo(fifo2,0666); } #endif char buf[128]{0}; int len0; int pidfork(); if(pid0) { int fd1 open(fifo1,O_WRONLY|O_TRUNC);//清除 while(1) { memset(buf,0,sizeof(buf)); printf(发送的消息:\n); scanf(%s,buf); while(getchar()!10); lenstrlen(buf); // if(len0);break; write(fd1,buf,len); } wait(0); close(fd1); } else if(pid0) { int fd2 open(fifo2,O_RDONLY);//清除 while(1) { memset(buf,0,sizeof(buf)); lenread(fd2,buf,sizeof(buf)); if(strcmp(buf,quit_pid)0) { break; } printf(接收的消息:%s\n,buf); printf(发送的消息:\n); } close(fd2); } return 0; }文件2#include stdio.h #include string.h #include stdlib.h #include sys/types.h #include sys/stat.h #include fcntl.h #include unistd.h #include dirent.h #include sys/wait.h #include pthread.h #include semaphore.h int main(int argc, const char *argv[]) { char fifo1[32]./fifo1.c; #if 1 int res1access(fifo1,F_OK); if(res1-1) { mkfifo(fifo1,0666); } #endif char fifo2[32]./fifo2.c; int res2access(fifo2,F_OK); if(res2-1) { mkfifo(fifo2,0666); } char buf[128]{0}; int len0; int pidfork(); if(pid0) { int fd1 open(fifo1,O_RDONLY);//清除 while(1) { memset(buf,0,sizeof(buf)); lenread(fd1,buf,sizeof(buf)); if(strcmp(buf,quit_pid)0) { break; } printf(接收的消息:%s\n,buf); printf(发送的消息:\n); } wait(0); close(fd1); } else if(pid0) { int fd2 open(fifo2,O_WRONLY|O_TRUNC);//清除 while(1) { memset(buf,0,len); printf(发送的消息:\n); scanf(%s,buf); while(getchar()!10); lenstrlen(buf); // if(len0)break; write(fd2,buf,len); } close(fd2); } return 0; }