fgets vs. std :: fgets- fgets错过了线条
fgets vs. std::fgets - lines are missed by fgets
我有以下代码:(cpp14)
static int const max_len = 1000;
FILE* m_in_log = NULL;
FILE* m_log = NULL;
...
...
bool readLine(char* line, int max_len)
if(!fgets(line, max_len, m_in_log)) {
return false;
}
fputs(line, m_log);
fflush(m_log);
return true;
}
它应该从日志文件逐行读取行,然后将其按原样写入其他日志文件。
它是在Linux中运行的复杂多线程系统的一部分,并且m_in_log
输入是FIFO。
当我多次运行此代码时,它会错过行:
假设m_in_log
包含以下行:
AAA
bbb
ccc
ddd
eee
但是我只看到
的输出日志文件AAA
eee
意思是fgets错过了阅读中间的3行(我知道这些行是发送到FIFO的事实,因为我们也将tee
从此FIFO进行了,并且在此文件中,所有5行都写了))。
在解决这个问题一段时间后(没有运气),我决定使用std
方法:
fgets => std::fgets
fputs => std::fputs
fflush => std::fflush
似乎解决了问题。
您能解释一下为什么使用std
方法可以解决此问题?
正如雷米·勒博(Remy Lebeau)所建议的那样, fgets
和 std::fgets
之间并没有差异,并且在用 std::fgets
运行代码〜20小时后,该问题被复制了。
所以我想我需要在其他地方搜索问题。
谢谢大家!
相关文章:
- gcc 是否在 2 条短裤的过度对齐结构的比较中错过了优化机会?
- 我的C++合并排序代码不起作用。我在这里错过了什么?
- 我是否为邪恶刽子手的构造函数错过了什么?
- C++:将向量传递给函数,然后在main中调用函数.错过了什么
- 随机访问迭代器:我错过了什么?
- 当编译时已知引用占用结构中的空间时,是否错过了优化?
- std::元组大小,是不是错过了优化?
- 在这个while循环中我错过了什么?
- 编译器错过了无效的构造函数调用,并调用不存在的(或私有的)默认构造函数
- 我是否错过了什么,或者虚拟呼叫的性能并不像人们所说的那样糟糕
- C 中MAP的反向迭代错过了第一个元素
- 仅在 2 的幂上错过了 clang 中的优化
- 我错过了boost :: mpi ::请求?测试似乎改变了状态
- 我在变量上收到 3 个 C4703 错误,我认为我已经正确初始化了,但我不确定我错过了什么
- 如果这不是 boost::lockfree::d etail::freelist 中的错误,我在这里错过了什么
- 尝试使用类,但未打印任何内容.不会生成任何错误.我错过了什么吗?
- 尝试实现通过引用传递的向量以与二叉树一起使用,我错过了什么
- c recursive_directory_iterator错过了一些文件
- fgets vs. std :: fgets- fgets错过了线条
- 此代码的输出是什么?我在这里错过了什么吗?