0
所以我曾经为IPC使用命名管道,但后来我失去了从一个进程发送的第一个值,因为另一个进程尚未启动。所以我接着使用只有一行的文件作为中间存储。从文件中读取一行,并从其他进程重写该行。 C
因此,当我的应用程序写入文件时,文件正在更新。这里是代码为:
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是否每次创建一个新文件?或者是什么问题以及如何解决?
如果每次更改阅读部分以重新打开文件,问题是否消失? – NPE 2012-01-31 10:19:22
当您以''w''模式打开文件时,它会被截断,这意味着您也可以使用此解决方案释放数据。你需要的是某种消息队列,例如见['man mq_overview'](http://linux.die.net/man/7/mq_overview)。 – 2012-01-31 10:29:57