从 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);
我正在尝试读取 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);