c - 你如何写入缓冲区然后写入文件

标签 c matlab buffer mex

我正在尝试从 matlab 中写入一些 STL 数据,并且我正在尝试通过编写 MEX 文件(用 C 语言编写的 matlab DLL)来做到这一点目前我有一个循环正在通过我的数据写出带 float 的 STL 语法。

...

for(m=0;m<colLen;m++)
{

    res = m % 3;
    if(res == 0)
    {   
        fprintf(fp, "\tfacet normal %f %f %f \n",
                normalValues[(x*nvcolLen)+0], normalValues[(x*nvcolLen)+1], normalValues[(x*nvcolLen)+2]);
        fprintf(fp,"\t\touter loop\n" );
        flag = 0;
        x++;
    }


    fprintf(fp, "\t\t\tvertex ");

    for(n=0;n<rowLen;n++)
    {
        fprintf(fp, "%f ", xValues[m*rowLen+n]);

    }

    fprintf(fp,"\n");

    flag++;

    if (flag == 3)
    {
        fprintf(fp, "\t\tendloop\n\tendfacet\n");
        flag = 0;
    }

}

...

我想在 MEX 文件中执行此操作的主要原因是编译后速度更快。我正在读一本 C++ 书,“Sams 在一天中自学 C++”,在第 645 页,他们谈到使用缓冲区来加速写入磁盘。一旦缓冲区填满,写入数据,刷新它,然后再做一次。他们并没有真正展示任何关于如何做到这一点的代码,这是 C++ 的流。

我将如何在 C 中处理这个问题?我是否只创建一个固定大小的 char* 缓冲区,然后以某种方式检查它何时已满并使用 fwrite() 将其写入文件,刷新它,重新开始??

最佳答案

基本上,如果你想自己做,你会几乎完全按照你写的那样做:制作一个 char* 缓冲区,跟踪其中的字符数(通过计算你的字符数放入其中),如果它已满(或接近满),则将其刷新到文件中。

但是,对于 C 流来说这真的不是问题,因为它们通常会进行缓冲。您甚至可以使用函数 setbuf et al. 控制此缓冲

关于c - 你如何写入缓冲区然后写入文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/573937/

相关文章:

python - ctypes中的循环结构,python

c - 在c中读取二进制文件直到文件末尾

python - Twisted:将 ReconnectingClientFactory 与 SSL 混合并使 write() 为 "reliable"

c++ - Winsock 非阻塞 send() 等待缓冲区。什么是正确的方法?

iphone - 尝试使用seekToFileOffset时出现错误

c - 如何减慢进程?

c - 索拉里斯 10 : handle gracefully ENOBUFS error when changing socket buffer

matlab - (MATLAB) 通过 2D 切片重建 3D CT 图像

Matlab 保存具有预定义大小的图形

matlab - 将 Matlab 结构打印到文本文件