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

时间:2012-01-31 10:13:01

标签: c file-handling

所以我曾经使用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每次都会创建一个新文件吗?或者问题是什么以及如何解决?

1 个答案:

答案 0 :(得分:1)

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