代码之家  ›  专栏  ›  技术社区  ›  Joe

popen/pclose的替代品?

  •  5
  • Joe  · 技术社区  · 17 年前

    我正在编写一个必须执行其他外部进程的程序;现在程序通过popen启动进程的命令行,获取任何输出,然后通过pclose获取退出状态。

    但是,对于快速运行的进程(例如,启动的进程错误很快就会消失),pclose调用无法获得退出状态(pclose返回-1,errno为ECHILD)。

    我有没有办法模仿popen/pclose类型的行为,除了保证捕获流程结束“事件”和结果返回代码之外?如何避免pclose的固有争用条件和启动进程的终止?

    2 回复  |  直到 17 年前
        1
  •  3
  •   William Pursell    17 年前

    fork/exec/wait

    popen只是简化fork/exec调用的包装器。如果要获取子对象的输出,需要创建管道、调用fork、将子对象的文件描述符复制到管道,然后执行。父级可以从管道读取输出并调用wait来获取子级的退出状态。

        2
  •  1
  •   i_am_jorf    17 年前

    您可以使用vWork()和execv()。