【问题标题】:FIFO server program先进先出服务器程序
【发布时间】:2011-11-08 03:31:29
【问题描述】:

上述程序是我在 linux 中输入的。它基本上必须在不同的终端中连接客户端和服务器。但是当我以正确的顺序运行它们时,即

  1. 编译服务器->运行服务器
  2. 编译客户端->运行客户端

终端什么都不做。它甚至不打印第一个printf 语句的"Trying to connect" 部分。这里有什么错误?

编辑

正如@parapura rajkumar 所说,我检查了mkfifo 的返回值。但它仍然保持不变。这是我更改的服务器代码。

if(mkfifo("fifo1",0666)<0) {
  printf("Error");
}
if(mkfifo("fifo2",0666)<0) {
  printf("Error");
}
fflush(stdout);

【问题讨论】:

  • 除非您要在一行上使用多个 printf 调用打印更多内容,否则建议以换行符 (\n) 结束 printf,因为这样会刷新输出所以它显示在控制台中。那你就不需要fflush了。

标签: c linux client-server mkfifo


【解决方案1】:

你陷入了僵局。服务器等待打开("fifo1",O_RDONLY),客户端等待打开("fifo2",O_RDONLY)。

编辑client.c:

int writefd = open("fifo1",O_WRONLY);
int readfd = open("fifo2",O_RDONLY);

【讨论】:

  • 更明确地说,打开fifo通常会阻塞,直到其他人也打开它以便他们可以连接。 (至少,默认情况下——它可以在非阻塞模式下打开,尽管这会使事情变得更复杂。)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多