簡體   English   中英

從文件讀取一行,而從其他進程重寫該行。 C

[英]Read one line from file while rewriting that line from other process. C

因此我曾經使用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機制。 您還會遇到同步問題。 在打開新文件和寫入數據之間是否可以進行讀取? 如何使用套接字? 這樣,您就可以判斷是否還有新數據在等待。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM