当另一个进程使用std :: fstream写入文件时从文件读取

时间:2014-12-28 16:45:59

标签: c++ stl fstream

我需要逐行读取文件,它是由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);
    }
}

有什么想法吗?感谢。

1 个答案:

答案 0 :(得分:6)

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

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