更清晰的用途是什么?

开尔文

我试图了解何时clearerr()应使用stdio函数

例如,如果我fread()fwrite()某人有效,FILE*并且获得了短暂的计数并且ferror为真,我该怎么办?

从我至今读,fread()并且fwrite()功能强大且将阻止和/或重试(如果有锁和/或可能在较低水平的功能发生中断),因而似乎永远不会任何点使用clearerr(),因为freadfwrite错误会被如此灾难性的,试图恢复毫无意义。

此外,ferror()仅告诉我有错误,而不是错误。

   #define SZ 1024
   FILE* fp = fopen( "foo", "r" );
   if ( fp ) {
      char b[SZ];
      int ch_count = fread( b, sizeof(char), SZ, fp );
      if ( ch_count != SZ && ferror( fp ) ) {
          // how would clearerr() be used. I don't know? 
          // ....
          // should I drop through here to fclose? (when I've got an ferror)
      }
      fclose( fp );
   }
Serge Ballesta

至少有一个现实世界的用例clearerr:当您要模仿tail -f未以独占模式打开的文件时。这意味着另一个(或许多其他)进程在文件末尾写入数据,并且甚至在到达文件末尾后,一个进程也会重复读取,以查看是否有新数据到达。在这种情况下,可能看起来像:

for (;;) {
    if (NULL == fgets(line, sizeof(line), fd)) {
        sleep(n);
        clearerr(fd);     // reset EOF condition
    }
    else {
        fputs(line, fdout);
    }
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章