📄
字号:
/*************************************************************
* 用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 + -