2010-05-18 4 views
0

Existe-t-il un moyen d'obtenir le chemin d'erreur/de sortie standard à partir du processus? J'ai essayé le standardError de NSTask mais il retourne NSFileHandle, et j'ai besoin du chemin en tant que chaîne. Merci!Récupérer StandardErrorPath à partir du processus dans OS X 10.6

p.s. StandardErrorPath est défini dans un fichier .plist utilisé par launchd pour démarrer le processus au démarrage du système. Le processus est un faisceau, écrit dans l'objectif c.

+0

Je suis confus. Voulez-vous la sortie/l'erreur standard pour votre propre processus, ou pour un NSTask (qui est un processus enfant)? –

+0

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

+0

NSTask est pour lancer un nouveau processus; vous ne pouvez pas en créer un pour un processus existant. –

Répondre

1

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:

  1. Dans le cadre de la procédure d'initialisation, il ouvre la voie à StandardErrorPath, obtenir le descripteur de fichier.
  2. 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.

+0

Le but était de renommer le fichier journal donné comme StandardError/OutputPath au démarrage du processus. De cette façon, il y aura des fichiers séparés pour le journal - par exemple pour chaque date. Quoi qu'il en soit, évidemment je devrais penser à une solution de contournement. Merci pour votre réponse. – stan0

+0

Je vois. Mais alors, pourquoi n'utilisez-vous pas simplement 'syslog' ou' asl'? Je préfère ne pas réinventer la roue. – Yuji

Questions connexes