c - 如何使用 FIFO 等待有人写入和读取?

标签 c linux fifo

如题所示,我在 Linux 系统中使用 C 在两个程序之间完成这项工作。 但是,我遇到了一些问题。 假设我有一个服务器在十轮内将数据写入 FIFO,并且 客户端将读取每一轮数据并写入另一个 FIFO 来馈送 返回服务器。 客户端将在每一轮中阻塞,直到服务器写入数据为止。 但是,我的客户端程序不能这样做。

我使用 fopen 打开 FIFO,使用 fgets 读取数据。 好像没有阻塞等待数据写入。

客户端代码:

FILE *fp_R,*fp_W;
char temp[100];
fp_R = fopen(FIFO_R,"rb");
fp_W = fopen(FIFO_W,"wb");
for ( i = 0 ; i < 10 ; i ++ ) {
   fgets(temp, 100, fp_R);
   Handle Data;
   fprintf(fp_W,DATA);
}

我想fgets等待服务器写入数据,这样我就可以处理每一轮

谢谢大家的帮助

最佳答案

正如 TonyB 所说,fopen() 函数将返回一个文件指针 FILE*

FILE *fp_R, *fp_W;
char temp[100];
fp_R = fopen(FIFO_R,"rb");
fp_W = fopen(FIFO_W,"wb");
for ( i = 0 ; i < 10 ; i ++ ) {
   char* ret = fgets(temp, 100, fp_R);
   while(ret == null)
   {
    Sleep(1);
   }
   Handle Data;
   fprintf(fp_W,DATA);
}

关于c - 如何使用 FIFO 等待有人写入和读取?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33949443/

相关文章:

c - 基于线程计算分配共享内存

c++ - 使用 libxml2 从 C++ 中的 XML <tag> 获取值

queue - 如何使用 couchbase 作为 fifo 队列

java - 我正在尝试实现一个 Queue 来反转堆栈并打印堆栈 FIFO?

c - 如何在 linux 中对齐 kmalloc() 地址

c - 为什么我的程序不会停止循环?

c - 静态常量

linux - Makefile命令替换问题

c - 打开SSL : What does RSA n e d p q parameters represent?

linux - 存在 FIFO 问题的输入循环