日期:2014-05-16  浏览次数:20659 次

popen()函数的问题
以下是我的程序中有关popen()函数的一段内容
if((proc_fp   =   popen( "ps   aux ",   "r "))   ==   NULL)
{
cout < < "popen   error\n ";
return   -1;
}

问题是,我在程序运行了一段时间之后,程序就报错,输出一堆的:popen   error.
可是刚开始运行的还挺好的呀,问题出在哪里呢?

------解决方案--------------------
if((proc_fp = popen( "ps aux ", "r ")) == NULL)
{
cout < < "popen error\n ";
return -1;
}

这段代码输出一次popen error就会马上退出,你输出一堆popen error,肯定不是这段代码的原因。

建议留意popen error之前的日志,那时候在做什么,输出了什么,是不是每次都是执行固定时间后出错
------解决方案--------------------
if((proc_fp = popen( "ps aux ", "r ")) == NULL)
{
cout < < "popen error\n ";
return -1;
}
======
这样写有什么用,改为perror( "popen "),就能知道错误原因了,一个可能的原因是没有popen后没有忘记调用pclose,结果超过了进程能文件描述符限制。
------解决方案--------------------
在执行pclose之前就再次popen了, 所以会出错.