代码之家  ›  专栏  ›  技术社区  ›  phimuemue

C:文件输出在524,0 kb时停止

  •  2
  • phimuemue  · 技术社区  · 15 年前

    为了得到我的结果,我创建了一个文件,我想把所有的程序输出都写到这个文件中。但是,即使程序应该向文件中写入某些内容,文件似乎也会在524KB处“停滞”。即,继续写入文件,直到达到524,0 kb的文件大小,然后不再向文件中写入任何内容。

    我知道有些东西应该写入文件,因为每次我写入这个文件时,我 printf 屏幕上的信息让我知道发生了什么事。

    我用的是C(相当低级的,只包括 stdio.h , stdlib.h , time.h , string.h

    我按以下方式创建文件:

      time_t rawtime;
      char timeStamp[20];
      struct tm* clocktime;
      time(&rawtime);
      clocktime = localtime (&rawtime);
      strftime (timeStamp, 20, "%Y%m%d_%H%M%S", clocktime);
      char dimStamp[80];
      sprintf(dimStamp, "d%dl%d_", DIMENSION, MAXDEPTH);
      strcat(dimStamp, timeStamp);
      strcat(dimStamp, ".txt");
      FILE *output = fopen(dimStamp, "w");
    

    有没有人遇到过类似的问题和/或有人知道这可能是什么原因?

    编辑:

    有没有可能输出到C中的文件有点异步,也就是说,我必须刷新一个缓冲区或其他东西,以便立即写入文件?

    4 回复  |  直到 6 年前
        1
  •  3
  •   schnaader    12 年前

    打电话 fflush 有时可以解决这个问题,你也应该检查你的数据是否可以是二进制数据,你必须使用二进制模式( "wb" 而不是 w

        2
  •  1
  •   nategoose    15 年前

    如果其他建议都不起作用,您可以尝试在程序上运行strace,并检查文件写入停止位置前后的位置,以查看stdio库是否已停止发出 write 调用该文件或内核是否发出错误。

    strace -o my_program.strace  ./myprogram
    

    errno 发生了什么错误。

        3
  •  0
  •   Yippie-Ki-Yay    15 年前

    你没有展示你真正的代码,但如果你正在做的话 fwrite (进行原始字节输出),您可能必须以二进制模式打开文件 ("wb")

    否则,您可能会遇到这样一种情况:二进制流中的一些数据可以处理,而纯文本流中的一些数据可以处理为EOF(例如代码示例中的一个)。

        4
  •  0
  •   zvrba    15 年前

    使用gdb连接到您的程序并实时查看它在做什么: gdb -p [PID]