我有以下代码:(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
意思是fget没有读取中间的3行(我知道这些行是发送到FIFO的,因为我们还将tee从这个FIFO发送到另一个文件,在这个文件中,所有5行都是写的)。
在为这个问题挣扎了一段时间(没有任何运气)之后,我决定使用std方法:
fgets => std::fgets
fputs => std::fputs
fflush => std::fflush问题似乎已经解决了。
请您解释一下为什么使用std方法可以解决这个问题吗?
发布于 2016-12-15 09:29:39
正如雷米·莱博( Remy )所建议的那样,fgets和std::fgets之间并没有真正的区别,在使用std::fgets运行了大约20小时之后,这个问题就被重现了。
所以我想我需要在别的地方寻找这个问题。
谢谢大家!
https://stackoverflow.com/questions/41145564
复制相似问题