linux下调用popen执行命令,然后调用fgets读取命令输出,大部分命令可以执行,执行某条命令时fgets挂住 100

........fp=popen(cmd,"r");if(!fp){return-1;}while(1){memset(buffer,0,sizeof(buffer));... ........
fp = popen(cmd, "r");
if (!fp) {
return -1;
}
while (1) {

memset(buffer, 0, sizeof(buffer));
fgets(buffer, sizeof(buffer) - 1, fp); ///执行某条命令时,会挂在这里
f(feof(fp)) {
break;
}
printf(xxxxx);
}
请大神帮忙分析一下原因,要怎么解决才行
展开
 我来答
匿名用户
2016-04-25
展开全部
起码你的代码有一个漏洞:第一次进入while时,!feof(pipe)是在判断谁?说明你对feof()这个函数并没有掌握,它必须在逻辑上“紧跟”在读文件动作之后才能正确生效,这第一次是“紧跟”在哪个读动作之后?到了文件结尾处就更可笑了:经while(!feof(pipe))判断文件还没有结束,比如说文件中还剩一个最后的'\n',可是体中的if(fread(&c,1,1,pipe)==1)中的fread函数还能读到什么?细节我就不说了,太长。建议把
while(!feof(pipe)){
if(fread(&c,1,1,pipe)==1){
result[i++]=c;
if(c==0)
break;
}
}
这一段改成
while(fread(&c,1,1,pipe),!feof(pipe)){
result[i++]=c;
//if(c==0)//这两句考虑一下吧,文件中有0吗?不可能有0,所以逻辑就有问题,建议删除
//break;
}
一试。
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式