Non, vous ne pouvez pas. Eh bien à strictement parler vous pouvez, en utilisant beaucoup de hackery avec le système d'exploitation, mais vous ne devriez pas. Vous ne devez pas déterminer le chemin pour les flux standard et ouvrir le chemin et écrire/lire dessus.
Les entrées/sorties/erreurs standard ne sont pas associées aux fichiers. Ils sont intrinsèquement associés aux descripteurs de fichiers, qui ne sont pas nécessairement associés à un chemin sur le système de fichiers. Ils sont une abstraction intentionnelle sur le concept de chemins, de sorte qu'un programme peut toujours écrire à l'entrée/sortie/erreur standard sans se soucier des chemins réels. De cette façon, le choix du chemin est fait du côté de l'utilisateur du programme, pas du programme lui-même.
Qu'est-ce launchd
fait quand il voit StandardErrorPath
est conceptuellement ceci:
- Dans le cadre de la procédure d'initialisation, il ouvre la voie à
StandardErrorPath
, obtenir le descripteur de fichier.
- Lancez l'application en définissant ce descripteur de fichier sur le "descripteur de fichier d'erreur standard" de l'application.
L'application, quand il veut écrire l'erreur-type, devrait juste écrire à l'erreur type, pas essayer de déterminer le chemin du fichier de l'erreur standard et écrire.
Je suis confus. Voulez-vous la sortie/l'erreur standard pour votre propre processus, ou pour un NSTask (qui est un processus enfant)? –
Je veux la sortie standard/erreur de mon propre processus. Je pense que ce que j'ai essayé de faire avec NSTask était faux. J'ai essayé de créer une tâche pour mon propre processus, puis j'ai obtenu standardError (en tant que NSFileHandle), en utilisant seulement init de NSTask. – stan0
NSTask est pour lancer un nouveau processus; vous ne pouvez pas en créer un pour un processus existant. –