从OS X 10.6中的进程中获取StandardErrorPath

时间:2010-05-18 09:41:13

标签: cocoa macos plist launchd

有没有办法从流程中获取标准错误/输出路径? 我尝试了NSTask的standardError,但它返回了NSFileHandle,我需要将路径作为字符串。 谢谢!

P.S。 StandardErrorPath在launchd用于启动系统启动过程的.plist中设置。这个过程是一个捆绑,用目标c写成。

1 个答案:

答案 0 :(得分:1)

不,你不能。严格来说,你可以使用操作系统的许多hackery,但你不应该。您不应该确定标准流的路径并打开路径并在其上写/读。

标准输入/输出/错误与文件无关。它们本质上与文件句柄相关联,文件句柄不一定与文件系统上的路径相关联。它们是对路径概念的有意抽象,因此程序总是可以写入标准输入/输出/错误,而无需关心实际路径。这样,路径的选择是在程序用户一侧完成的,而不是程序本身。

launchd在看到StandardErrorPath时所做的事情在概念上是这样的:

  1. 作为初始化过程的一部分,它打开StandardErrorPath中的路径,获取文件描述符。
  2. 启动应用程序,将该文件描述符设置为应用程序的“标准错误文件描述符”。
  3. 当应用程序想要写入标准错误时,应该写入标准错误 not 尝试确定标准错误的文件路径并写入。