我正在练习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);
更新: 我自己解决了这个问题。看来我不能同时打开多个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);