gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 15:59:18 25 4
gpt4 key购买 nike

所以我曾经使用命名管道进行 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。您还遇到同步问题。在打开新文件和写入数据之间是否可以进行读取?使用套接字怎么样?这样您就可以知道是否还有新数据在等待。

关于c - 从文件中读取一行,同时从其他进程重写该行。 C,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9077735/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com