gpt4 book ai didi

c++ - 为什么当 popen() 中的命令失败时返回的 FILE* 保留数据

转载 作者:太空宇宙 更新时间:2023-11-04 04:55:33 27 4
gpt4 key购买 nike

我正在开发一个使用 popen() 来查找文件的程序。然后将popen()返回的流中的数据复制到char数组中并打印。

#include <iostream>
#include <cstdio>
#include <cstring>

int main()
{
char command[1024];
char ch = 'a';
FILE* pf;
while(ch < 'd')
{
sprintf(command, "find /home/ypatil/interest -name \\%c.out", ch);
std::cout << std::endl << command << std::endl;
pf = popen(command, "r");
if(pf)
{
char src[256];
fgets(src, 256, pf);
std::cout << std::endl << "pf = " << src << std::endl;
}
pclose(pf);
++ch;
}
return 0;
}

现在,我正在循环中执行此操作,我发现如果文件程序正在搜索不存在,则文件流 pf 保留其旧值。我的系统上仅存在 a.out 文件。所以,这个程序的输出是 -

find /home/ypatil/interest -name \a.out

pf = /home/ypatil/interest/a.out


find /home/ypatil/interest -name \b.out

pf = /home/ypatil/interest/a.out

find /home/ypatil/interest -name \c.out

pf = /home/ypatil/interest/a.out

因此,您可以看到 find 正在搜索不同的文件,并且只有 a.out 存在。因此,对于其他文件来说它将失败。但是,pf 在每次迭代中仍然保留其数据。我想知道为什么它保留先前迭代中 popen 返回的 FILE * 值。谢谢。

最佳答案

Shoudn't it be NULL when find fails?

不,它应该是一个有效的FILE *,包含find进程的管道输出。如果该过程不产生任何输出,则读取它会立即产生 EOF。启动 find 进程在这里并没有失败:它只是没有找到任何东西。

不清楚为什么你不这么认为。

关于c++ - 为什么当 popen() 中的命令失败时返回的 FILE* 保留数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47068236/

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