FIFO 通信问题[已修复]

问题描述 投票:0回答:1

我正在练习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);
c linux process fifo
1个回答
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);
© www.soinside.com 2019 - 2024. All rights reserved.