【问题标题】:read from a file while another process is writing to it using std::fstream [duplicate]在另一个进程使用 std::fstream 写入文件时从文件中读取 [重复]
【发布时间】:2014-12-28 16:45:59
【问题描述】:

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

有什么想法吗?谢谢。

【问题讨论】:

  • 其他程序应该通知这段代码何时读取以及何时等待
  • 您是否尝试或想要尝试锁定/信号机制来代替Sleep

标签: c++ stl fstream


【解决方案1】:

当流到达文件末尾并设置错误标志时。设置错误标志后,流将不会执行任何读取操作。假设您可以打开文件同时读取和写入(例如 POSIX 系统上的情况),您 couldclear()` 状态标志并轮询流。您可能需要适当的等待。

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

【讨论】:

  • 只需在 while 循环中添加一个ifs.clear(),它现在就可以工作了!对我的简单程序来说已经足够了,谢谢。
猜你喜欢
  • 2013-03-01
  • 2012-10-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多