如何使setvbuf中的_IOLBF选项起作用

问题描述

网络上有许多示例,介绍了如何使用 setvbuf 实用程序使用完全缓冲/未缓冲的流。但是,我正在努力使用行缓冲选项。

假设我们有一个文本文件“ nums.txt”,其中包含两行整数。

>$ cat nums.txt
1 2 3 4 5 6 7 8 9 10
11 12 13 14 15 16 17 18 19

我想读取文件,并使用行缓冲选项将流输出到stdout。

观察:两行同时打印。

预期的行为:第一行将打印到标准输出,然后(一秒钟后)打印到第二行。

代码如下:

int main(int argc,char *argv[]) {
  
  FILE *fp;
  int BUFSIZE = 25;
  char buffer[BUFSIZE];
  
  if (argc != 2) {
     fprintf(stderr,"Usage: %s <filename>\n",argv[0]);
     return 1;
     }
  else { fp = fopen(argv[1],"r");
       
    setvbuf ( fp,buffer,_IOLBF,BUFSIZE );
    while (fgets(buffer,sizeof(buffer),fp) != 0)
    {   
    fputs(buffer,stdout);
    fflush(fp);
    sleep(1);
    }
    
    fclose (fp);   
    }
    
return 0;
}

可以通过以下方式调用程序

>$ ./myprogram nums.txt

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)