c - 从 fifo C 读取

标签 c fifo

<分区>

我正在尝试从 fifo 读取数据,但我不理解它的行为。 这是写入端,write.c:

for(int i = 1;i<argc;i++){
    if(write(fifoFd,argv[i],strlen(argv[i])) <= 0)
      perror("Error writing");
  }

这是读取端,read.c:

  char buf[1024];
  while(1){
    int b = read(fifoFd,buf,1024);
    if(b<=0) break;
  }
  printf("%s\n",buf);

首先我开始 read.c ./read 然后我执行 ./write 如果我像这样执行写入 ./write backup *.txt 有时我会得到我预期的结果,即 backupexample1.txtexample2.txt。 但有时我只得到 example1.txtexample2.txt 而我不明白这一点,“备份”在哪里?

最佳答案

您的代码:

while(1){
  int b = read(fifoFd,buf,1024);
  if(b<=0) break;
}
printf("%s\n",buf);

你循环,每次通过循环你覆盖缓冲区,然后你打印缓冲区。因此,有时您会阅读“backup”,然后阅读“example1.txtexample2.txt”(它会覆盖“backup”),而其他时候您会一次阅读所有内容。

如果您将循环更改为读入缓冲区的未填充部分,它的行为将保持一致:

int read = 0;
while(read != 1024){
  int b = read(fifoFd,buf+read,1024-read);
  if(b<=0) break;
  read += b;
}
printf("%s\n",buf);

关于c - 从 fifo C 读取,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37120710/

相关文章:

c - 为什么在 C 中将\0 定义为 char 数组的第一个元素?

c - 在二叉树中搜索元素,函数总是返回0

C - 阻止其他人写入文件

algorithm - 为什么 LRU 优于 FIFO?

具有相同声明但不同实现的 C 头文件

c - 跳过位图到字符串转换器中的填充?

c++ - 使用堆的优先级队列,具有相同键的值不遵循FIFO(先进先出)

datetime - System.Collections 是我的场景的最佳选择

c - 打开 FIFO 进行写入返回 "No such device or address"

c++ - 如何检测无符号整数溢出?