我可以在不关闭文件描述符的情况下打开多个 popen 吗?

标签 c linux

在同一个函数中调用下一个 popen 之前,我可以对多个 popen 使用相同的文件描述符而不关闭它吗? 长期运行会不会有任何运行时错误的内存泄漏? 例如

    fun()
    { FILE *fd  = popen (some_command, "r");
      fd = popen (another_command, "r");
      fd = popen (another_command, "r");
      ... and so on..
      fclose(fd);   //at the end of the program 
    } 

最佳答案

不要那样做。您将丢失上一个 popen 调用返回的 FILE*,因此您将无法 pclose() 那些。因此,这会造成资源泄漏,内存不会被释放,并且您可能永远不会终止启动的进程。

还请注意,您应该调用 pclose() 而不是 fclose()

关于我可以在不关闭文件描述符的情况下打开多个 popen 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20425893/

相关文章:

c - 在函数返回值上使用一元 & 运算符

c - 68000,可移植JIT库

c - 在 fork 和 exec 之后在父子之间共享一个文件描述符

c - 在 .rodata 和 .rodata1 中检索偏移量、字符串和虚拟地址

c - 如何在linux(32位)下编译C版vtd-xml

c - 如何声明指向不同数据类型的指针,但它们将占用相同的内存空间

c - 减去指针后的输出

c# - 使用 CodeDom 以编程方式编译 C# Windows 窗体中的 C 代码?

linux - 如何将初始输入通过管道传输到随后将是交互式的进程中?

Python subprocess.popen错误的pid