从文件读取,而另一个进程正在使用 std::fstream 写入该文件

read from a file while another process is writing to it using std::fstream

本文关键字:文件 std fstream 读取 另一个 进程      更新时间:2023-10-16

我需要逐行读取文件,它是由std::getline完成的。另一个进程的问题一直是将数据附加到它,然后我需要读取新行。

例如,文件首先包含 10 行,我的程序

读取 10 行,然后我的程序应该等待。过了一会儿,另一个进程将 5 行附加到文件中,然后我的程序读取这 5 行。

我试过这个,但它不起作用:

int main() {
    ifstream ifs("test.txt");
    string line;
    while(1) {
        while(std::getline(ifs, line)) {
            cout << line << endl;
        }
        Sleep(50);
    }
}

知道吗?谢谢。

当流到达文件末尾并设置错误标志时。设置错误标志后,流不会执行任何读取操作。假设您可以打开文件 fir 同时读取和写入(例如 POSIX 系统上的情况),could清除()' 状态标志并轮询流。您可能会包括一个合适的等待。

没有标准的C++接口可用于在文件更改时接收一些信号。最好使用适当的 IPC 机制,例如管道,只要仍然有一个写入过程,它就会在尝试接收更多数据时阻塞。