gpt4 book ai didi

c++ - 使用 QProcess 仅根据需要 zcat 行数?

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:23:06 27 4
gpt4 key购买 nike

如果我在 Linux 中运行此命令

zcat bigFile | head

然后 zcat 将不会解压所有的 bigFile,只解压以提供 head 所需的数据.

但是这个呢

QProcess *process = new QProcess(this);
process->start("zcat bigFile");
process->readLine();
QTimer::singleShot(10000, process, SLOT(terminate()));

process 中运行的 zcat 命令是否只解压缩 readLine() 所需的内容?还是会持续 zcat bigFile 10 秒?

是否可以使用类似于 Linux 管道 |QProcess,从而仅 zcat 请求的行数?

最佳答案

Will the zcat command that is run in process only decompress whatever is needed for readLine()?

没有

Or will it continuously zcat bigFile for 10 seconds?

为了验证这一点,我写了下面的代码

QProcess *process = new QProcess(this);
process->start("yes");

connect(process, SIGNAL(finished(int)), this, SLOT(_end()));
connect(process, SIGNAL(error(QProcess::ProcessError)), this, SLOT(_end()));

QByteArray byteArray = process->readLine(5);
QString line = QString(byteArray);

process->closeReadChannel(QProcess::StandardOutput);

QTimer::singleShot(5000, process, SLOT(terminate()));

这基本上启动了 yes 命令,它持续输出这个

y
y
y
y
... (and so on)

然后从 yes 的输出中只读取一行,然后在 5 秒后终止进程。

我在观看 top 时运行了这个命令,结果是 5 秒的 yes 占用了 100% CPU,之后它退出了。这清楚地表明 yes 不仅仅是打印出一行然后停止或退出。

即使关闭 stdout 读取 channel (忽略 yes 的其余输出)仍然不会暂停 yes 执行。

你可以试试 pausing QProcess 定期执行,直到您有足够的时间来处理缓冲区,但这可能会变得困惑。

关于c++ - 使用 QProcess 仅根据需要 zcat 行数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18088299/

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