chenshuo/muduo

FileUtil::AppendFile::append issue

Closed this issue · 2 comments

https://github.com/chenshuo/muduo/blob/f29ca0ebc2f3b0ab61c1be08482a5524334c3d6f/muduo/base/FileUtil.cc#L40C9-L40C20
大佬,看起来 n != remain 这个判断条件有问题,如果是这样的话就没必要 while 循环了,此处应该是 n <= 0 吧

大致注释了一下, 你看看, 我觉得没有问题。

// 向文件中写入len长的logline
void FileUtil::AppendFile::append(const char* logline, const size_t len)
{
  // written: logline已写入文件的长度
  size_t written = 0;
  // 判断是否写完
  while (written != len)
  {
    // remain: 剩余长度(未写入长度)
    size_t remain = len - written;
    // n: 此次写入成功的长度
    size_t n = write(logline + written, remain);
    // 判断: 是否把剩余内容全部成功写入
    if (n != remain)
    {
      int err = ferror(fp_);
      // 判断: 是否写入失败
      if (err)
      {
        // 写入失败, 退出写入
        fprintf(stderr, "AppendFile::append() failed %s\n", strerror_tl(err));
        break;
      }
      /**
      else
      {
        // 不是写入失败(一部分写入成功), 继续(写入剩余部分)
      }
      */
    }
    // 累加logline已写入成功的长度
    written += n;
  }
  // 已成功写入至文件的总长度
  writtenBytes_ += written;
}

确实,没有完全写入 && err == 0 还是能继续进行下一次循环的,看到大佬加的这个 else 部分的注释瞬间清晰了,感谢指点!