gpt4 book ai didi

C++ 为什么我的代码不打印对给定文件所做的更新

转载 作者:可可西里 更新时间:2023-11-01 16:40:21 24 4
gpt4 key购买 nike

我试图用 C++ 编写代码,在 Linux 中执行类似于 tail -f 的操作。我发现了这个问题: How to read a growing text file in C++?并实现相同。我创建了一个 temp.txt 并开始执行 echo "temp">> temp.txt。但是我的程序没有打印对文件所做的更新。我做错了什么?这是我正在使用的代码

#include <iostream>
#include <string>
#include <fstream>
#include <unistd.h>

int main()
{
std::ifstream ifs("temp.txt");

if (ifs.is_open())
{
std::string line;
while (true)
{
while (std::getline(ifs, line)) std::cout << line << "\n";
if (!ifs.eof()) break; // Ensure end of read was EOF.
ifs.clear();
sleep(3);
}
}

return 0;
}

更新

我在 Linux 机器上尝试过相同的代码,它工作正常,但它在 Mac 上不工作。我正在使用 gcc 来编译代码。

gcc -v 给出

Configured with: --prefix=/Applications/Xcode.app/Contents/Developer/usr --with-gxx-include-dir=/usr/include/c++/4.2.1
Apple LLVM version 6.1.0 (clang-602.0.49) (based on LLVM 3.6.0svn)
Target: x86_64-apple-darwin14.3.0
Thread model: posix

更新 2
我进一步调查并意识到我毕竟没有使用 gcc。我已经单独安装了 gcc,现在工作正常。这是 clang 中的错误吗?

最佳答案

很有可能 cout缓冲区在您的测试中没有刷新,因为缓冲区大小没有达到溢出限制。您可以尝试通过执行 std::cout << line << std::endl; 来刷新缓冲区而不是 std::cout << line << "\n";或调用std::cout.flush()l之前sleep(1); .这两种方式都应该与 clang 和 gcc 一起可靠地工作。

这些问题的答案很好地解释了缓冲:

C++ cout and cin buffers, and buffers in general

Strange behaviour of std::cout in Linux

关于C++ 为什么我的代码不打印对给定文件所做的更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29982673/

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