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