繁体   English   中英

从文件读取一行,而从其他进程重写该行。 C

[英]Read one line from file while rewriting that line from other process. C

因此我曾经使用IPC的命名管道,但后来我丢失了一个进程发送的第一个值,因为另一个进程尚未启动。 因此,我开始使用仅一行作为中间存储的文件。

因此,当我的应用程序正在写入文件时,文件正在更新。 这是该代码:

dmHubRead = fopen ("/tmp/file", "w");
if (!dmHubRead) {
        log_error ("can't create /tmp/file: %m");
        return 0;
    }

fprintf (dmHubRead,
     "value %02d:%02d:%02d;\n",
     t->x, t->y, t->z);

fflush (dmHubRead);
fclose(dmHubRead);

然后,我的其他程序正在打开文件,并希望经常读取第一行。 该程序不会在读取之间关闭文件。 这是该程序的代码:

if ((_file = fopen(FILE_PATH, "r")) < 0) {
        DebugLogger::put(DebugLogger::Error, "Could not open file.", __FILE__, __LINE__);
}
...
size_t sz = 0;
char *line = NULL;

if(fsync(fileno(_file)) < 0) {
  perror("fsync");
}

rewind(_file);
getline(&line, &sz, _file);

所以我的问题是,这不起作用。 书写部分中的fopen是否每次都会创建一个新文件? 或者是什么问题,如何解决?

每次运行时,“写”端都会创建一个新文件。 读取端失败,因为每次写入新文件时文件句柄都将变为无效。 如果您每次访问文件时都重新打开该文件,则您的代码应该可以正常工作。 正如Joachim所提到的,有更优雅的方法可以做到这一点。 您没有提到您正在运行的系统。 根据是Windows,Linux还是其他操作系统,有更好的IPC机制。 您还会遇到同步问题。 在打开新文件和写入数据之间是否可以进行读取? 如何使用套接字? 这样,您就可以判断是否还有新数据在等待。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM