car*_*los 7 c linux popen fclose pclose
几个月前,我写了一个用于Linux的CGI应用程序,用于popen()读取命令的输出,然后我关闭管道fclose().
现在,我读到需要使用密切管道pclose().
手册说:
返回值
popen()是一个正常的标准I/O流,除了必须用pclose()而不是 关闭之外,它在所有方面都是fclose(3).
我的代码是这样的:
if ((NULL != (f = popen(command.value, "r")))) {
//do something
fclose(f);
}
Run Code Online (Sandbox Code Playgroud)
我的问题是:
我的错误有安全问题吗?该计划目前正在制作中.在测试中它没有做任何问题.真正需要的,用打补丁pclose()来代替fclose()?注意:我只在程序中打开一次PIPE.
今天,在我当地的家里,我做了一些测试,fclose()并pclose()没有返回EOF表示失败.
如果在管道上使用fclose,则会出现文件描述符泄漏,因为fclose不会释放内核中的文件指针(这是在创建管道时创建的,因为它是一个文件).
虽然到目前为止您的测试没有显示任何问题,但运行您的程序3000次(或者如何允许多个文件描述符,我认为更高的int)并观察何时您将无法再创建管道.
| 归档时间: |
|
| 查看次数: |
3276 次 |
| 最近记录: |