FileUtil::AppendFile::append issue
Closed this issue · 2 comments
OpenJony commented
https://github.com/chenshuo/muduo/blob/f29ca0ebc2f3b0ab61c1be08482a5524334c3d6f/muduo/base/FileUtil.cc#L40C9-L40C20
大佬,看起来 n != remain 这个判断条件有问题,如果是这样的话就没必要 while 循环了,此处应该是 n <= 0 吧
TsingMingCheung commented
大致注释了一下, 你看看, 我觉得没有问题。
// 向文件中写入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;
}
OpenJony commented
确实,没有完全写入 && err == 0 还是能继续进行下一次循环的,看到大佬加的这个 else 部分的注释瞬间清晰了,感谢指点!