1

网上有很多关于如何使用setvbuf实用程序使用完全缓冲/非缓冲流的示例。但是,我正在为行缓冲选项而苦苦挣扎。

假设我们有一个包含两行 int 数字的文本文件“nums.txt”。

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

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

观察:两行同时打印。

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

这是代码:

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
4

0 回答 0