linux fifo文件,c – 写入/读取FIFO文件 – linux

我一直在尝试围绕FIFO,并提出了一个简单的服务器和客户端程序.

我不是想做任何花哨的事情,只是为了让一个进程扮演’服务器’的角色,这个过程将“监听”另一个进程传递的任何消息;客户端.

这是我写的:

server.c

#include

#include

#include

#define INGOING "clientToServer.fifo"

#define BUFFER 200

int main(int argc, char *argv[]) {

char in[BUFFER];

mkfifo(INGOING, 0666);

printf("Welcome to server.\n");

printf("channel for sending messages to server is %s\n", INGOING);

int in_fd=open(INGOING, O_RDONLY);

if (in_fd==-1) {

perror("open error");

exit(-1);

}

while (read(in_fd, in, BUFFER)>0) {

printf("You sent %s to server.\n", in);

}

return 2;

}

正如你所看到的,当我在./server.out&的背景下运行时,这非常简单.它在读取调用时被阻塞,并等待任何人写入clientToServer.fifo.到现在为止还挺好.

现在,考虑客户端:

client.c

#include

#include

#include

#define BUFFER 200

int main(int argc, char *argv[]) {

char input[BUFFER]={0};

int out_fd=open("clientToServer.fifo", O_WRONLY);

if (out_fd==-1) {

perror("open error");

}

while (1) {

printf("What would you like to send to server? (send Quit to quit)\n");

fgets(input, BUFFER, stdin);

if (input[strlen(input)-1]=='\n') {

input[strlen(input)-1]='\0';

}

if (strcmp(input, "Quit")==0) {

printf("Bye!");

break;

}

if (write(out_fd, input, strlen(input))==-1) {

perror("write error");

}

}

return 1;

}

这是客户.也很简单的代码.当我从shell运行./a.out时,它可以工作 – 它发送消息,而server.out进程打印你发送%s到服务器.

问题是,当我通过客户端将Quit发送到服务器时,尽管a.out进程根据需要终止,但server.out中的while循环也会中断.意思是,read不再阻塞server.out进程并等待其他客户端,而是服务器程序与客户端一起结束.

为什么会这样?即使在a.out进程结束后,read也不应该再次暂停server.out?

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值