几个月前,我为 Linux 编写了一个 CGI 应用程序,它使用popen()
读取命令的输出,然后我关闭管道fclose()
.
现在,我读到关闭管道需要使用pclose()
.
手册说:
返回值来自popen()
是一个普通的标准I/O流
尊重除了它必须关闭pclose()
而不是fclose(3)
.
我的代码是这样的:
if ((NULL != (f = popen(command.value, "r")))) {
//do something
fclose(f);
}
我的问题是:
我的错误有安全问题吗?该计划目前正在制作中。在测试中它没有做任何问题。确实需要,使用补丁pclose()
反而fclose()
?注意:我在程序中只打开了一次PIPE。
今天,在我当地的家里我做了一些测试fclose()
and pclose()
不返回EOF表示失败。
根据这个线程 http://cboard.cprogramming.com/cplusplus-programming/97147-pclose-vs-fclose.html, using fclose
代替pclose
意味着管道另一端的进程没有被收获,因此它保持僵尸状态。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)