📄 example2-04.c
字号:
/************************************************************* * 用FIFO实现进程间通信的例子example2-03.c example2-03.c ************************************************************/ /******************************************************************************************* * 首先,用自己的进程ID作为所创建的FIFO的名字的后一部分。 * 然后,客户端请求其进程号、一个空格、一个路径名和一个换行符组成。其中,路径名从标准输入读入。 * 接着,打开服务器的FIFO将自己的请求写入。 * 最后,从本客户的FIFO中读出服务器返回的内容并将其打印到标准输出,关闭客户的FIFO并删除。 * * 程序的运行:可以在两个窗口中分别运行服务器端和客户端进程。 也可以在同一窗口中先将服务器进程作为后台来运行,然后运行客户进程。 *******************************************************************************************//***************************************** * 客户端程序example2-04.c *****************************************/#include <stdlib.h>#include <stdio.h>#include <unistd.h>#include <errno.h>#include <sys/stat.h>#include <fcntl.h>#define LINE 1024#define FILE_MODE (S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH)#define SERV_FIFO "/tmp/fifo.serv"int main(){ int readf, writef; size_t len; size_t n; char *ptr, fifoname[LINE], buff[LINE]; pid_t pid; pid = getpid(); snprintf(fifoname, sizeof(fifoname), "tmp/fifo.%d", (long)pid); if ((mkfifo(fifoname, FILE_MODE) < 0) && (errno != EEXIST)) //未产生文件或文件不存在,则 printf("can't create %s", fifoname); snprintf(buff, sizeof(buff), "%ld", (long)pid); len = strlen(buff); ptr = buff + len; fgets(ptr, LINE - len, stdin); len = strlen(buff); writef = open(SERV_FIFO, O_WRONLY, 0); write(writef, buff, len); readf = open(fifoname, O_RDONLY, 0); while ((n = read(readf, buff, LINE)) > 0) write(STDOUT_FILENO, buff, n); close(readf); unlink(fifoname); exit(0);}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -