【发布时间】:2012-01-31 10:13:01
【问题描述】:
所以我曾经为 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 每次都会创建一个新文件吗?或者是什么问题,如何解决?
【问题讨论】:
-
如果每次更改读取部分重新打开文件,问题就消失了吗?
-
当您以
"w"模式打开文件时,它会被截断,这意味着您也可以使用此解决方案丢失数据。你需要的是某种消息队列,例如man mq_overview。
标签: c file-handling