【问题标题】:Write file in real time with C用C实时写文件
【发布时间】:2013-10-20 20:24:27
【问题描述】:

如何将数据实时写入文件? 我的意思是:一个程序使用fprintf(...) 命令获取数据并将它们放入一个文件(我们可以说out.txt),然后另一个程序从文件中读取数据(out.txt ) 并详细阐述它们。

我有这样的流程:

fp=fopen("out.txt","w+");

    while(...) {

    ...

    fprintf (fp,"\n %s", data);

}

fclose(fp);

通过该流程,我在关闭文件后将数据放入文件 (out.txt)。

有没有办法将数据实时写入文件?

【问题讨论】:

  • 在每个 fprintf 之后调用 fflush(fp)。
  • 您需要命名管道、消息队列或其他一些 IPC 机制。您确实希望依赖在进程中使用“fprintf()”写入的打开文件与另一个进程中的“fread()”同步。
  • 或许可以考虑使用 FIFO。 man fifo 如果您的平台支持。

标签: c real-time fopen printf


【解决方案1】:

当你说 实时 时,我怀疑你的意思是 同时。同时访问 到文件需要打开共享文件。这可能是管道或其他一些进程间 沟通。根据要求,它也可能是磁盘上的一个简单文件。 Windows 允许打开 通过_fsopen 共享文件。

#include <share.h> // required for manifest constants for shflag parameter.

fp = _fsopen("out.txt","w+",_SH_DENYWR); // e.g. _SH_DENYWR denies write access
   .
while(...) {
   .
   .

另一个进程可以在文件打开时读取它;无需事先关闭文件。另一个进程甚至可以写(shflag = _SH_DENYNO)。但是,从不同进程同时写入和读取需要更多的编码工作。

   .
  fprintf (fp,"%s\n", data); // you may want to have the /n "new line" after writing the data
   .

并非所有写入的内容总是立即写入文件(物理上)。因此需要在fprintf之后强制将内容写入文件。

   .
  fflush(fp); // force writing to device    
   .
}

【讨论】:

    猜你喜欢
    • 2021-09-17
    • 2019-06-05
    • 2012-12-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-14
    相关资源
    最近更新 更多