我有以下代码:(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的事实,因为我们也从这个FIFO到另一个文件tee
,并且在这个文件中所有5行写的。)
在这个问题上挣扎一段时间后(没有任何运气)我决定使用std
方法:
fgets => std::fgets
fputs => std::fputs
fflush => std::fflush
似乎问题已经解决了。
您能否解释为什么使用std
方法可以解决此问题?
答案 0 :(得分:0)
正如Remy Lebeau所说,fgets
和std::fgets
之间并没有什么区别,并且在使用std::fgets
运行代码约20个小时之后,该问题又被重现了。
所以我想我需要在其他地方搜索问题。
谢谢大家!