C/C++ fwrite函数写文件延迟问题,可尝试的加速办法

前段时间在iOS平台构建算法的Simulation工程,输出结果出现了数据丢失现象,我们的算法是使用 fread() 函数一帧一帧读取,然后进行算法处理,最后使用 fwrite() 函数输出算法处理后的数据写入文件,但是发现保存的文件大小不对。

于是了解使用了以下几个函数。仅作记录,具体用法可以再做详细查询。
fflush() 函数、fsync() ,fdatasync()函数。

关于 Linux IO同步函数:sync、fsync、fdatasync,点击这个链接,可以详细了解几个函数的用法和区别。


以下是摘自码农家园 :关于C#:将stdout记录到文件的长时间延迟 的内容。
在这里插入图片描述
在这里插入图片描述

#define _XOPEN_SOURCE 500

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>

int main(int argc, char **argv){

        FILE *fp = fopen("test.txt","w");

        char *line ="Test
";
        char *fill ="\0";

        fwrite(fill, 1, 100*strlen(line), fp);
        fflush(fp);
        fsync(fileno(fp));

        rewind(fp);

        for (int i = 0; i < 100; i++){

                fwrite(line, strlen(line), 1, fp);
                fflush(fp);
                fdatasync(fileno(fp));

        }

}

ps:
当然,我们的数据丢失问题经过以上几个函数还是没有解决,个别iPhone机型还是存在数据丢失问题。😦
但是上面几个函数可以排除一些问题的可能性,对了打开文件记得 fclose() ,执行fclose 了,就会一次性将缓冲区未写完的数据写进文件。

参考链接:关于C#:将stdout记录到文件的长时间延迟

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值