提问人:Harvey Yeh 提问时间:11/12/2023 最后编辑:Harvey Yeh 更新时间:11/12/2023 访问量:34
FIFO 通信问题 [已修复]
FIFO communication issue [Fixed]
问:
我正在练习linux fifo的读写。我创建了两个文件。一个是 client.c,另一个是 server.c。我正在尝试交换两个程序的名称。所以我创建了两个 fifo。客户端首先写入 AToB fifo,等待服务器读取。然后客户端等待服务器写入 BToA fifo。
为什么两个节目都没有进行到最后,似乎两个都在等待对方?
我的结果如下:
客户端.c
#include <stdio.h>
#include <string.h>
#include <fcntl.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <unistd.h>
int main(int argc, char** argv)
{
char name[80];
char temp[80];
strcpy(name,"Harris");
name[strlen(name)]='\0';
printf("Original name: %s\n",name);
char * myfifo = "AToB";
char * myfifo2 = "BToA";
mkfifo(myfifo, 0666);
mkfifo(myfifo2, 0666);
/////////////////////////////////////////////
int fd = open(myfifo, O_WRONLY);
int fd2 = open(myfifo2, O_RDONLY);
//////////////////////////////////////
write(fd, name, strlen(name)+1);
close(fd);
read(fd2, temp, sizeof(temp));
close(fd2);
strcpy(name,temp);
name[strlen(name)]='\0';
printf("After name: %s\n",name);
return 0;
}
服务器.c
#include <stdio.h>
#include <string.h>
#include <fcntl.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <unistd.h>
int main(int argc, char** argv)
{
char name[80];
char temp[80];
strcpy(name,"Amy");
printf("Original name: %s\n",name);
char * myfifo = "AToB";
char * myfifo2 = "BToA";
int fd = open(myfifo2, O_WRONLY);
int fd2 = open(myfifo, O_RDONLY);
////////////////////////////////////////
read(fd2, temp, sizeof(temp));
close(fd2);
write(fd, name, strlen(name)+1);
close(fd);
strcpy(name,temp);
name[strlen(name)]='\0';
printf("After name: %s\n",name);
return 0;
}
更新: 我自己解决了这个问题。似乎我无法一次打开多个 fifo。如果我像下面这样修改代码,它将起作用。
int fd = open(myfifo, O_WRONLY);
write(fd, name, strlen(name)+1);
close(fd);
int fd2 = open(myfifo2, O_RDONLY);
read(fd2, temp, sizeof(temp));
close(fd2);
答:
1赞
Harvey Yeh
11/12/2023
#1
更新: 我自己解决了这个问题。似乎我无法一次打开多个 fifo。如果我像下面这样修改代码,它将起作用。
int fd = open(myfifo, O_WRONLY);
write(fd, name, strlen(name)+1);
close(fd);
int fd2 = open(myfifo2, O_RDONLY);
read(fd2, temp, sizeof(temp));
close(fd2);
评论
open()