首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >fgets与std::fgets line被fget遗漏了。

fgets与std::fgets line被fget遗漏了。
EN

Stack Overflow用户
提问于 2016-12-14 14:53:32
回答 1查看 176关注 0票数 1

我有以下代码:(cpp14)

代码语言:javascript
复制
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方法:

代码语言:javascript
复制
fgets => std::fgets

fputs => std::fputs

fflush => std::fflush

问题似乎已经解决了。

请您解释一下为什么使用std方法可以解决这个问题吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-12-15 09:29:39

正如雷米·莱博( Remy )所建议的那样,fgetsstd::fgets之间并没有真正的区别,在使用std::fgets运行了大约20小时之后,这个问题就被重现了。

所以我想我需要在别的地方寻找这个问题。

谢谢大家!

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41145564

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档