从 fifo C 读取

Reading from a fifo C

我正在尝试读取 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 而我不明白这一点,"backup" 在哪里?

您的代码:

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);