2010-05-18 2 views
0

프로세스 내에서 표준 오류/출력 경로를 가져 오는 방법이 있습니까? NSTask의 standardError을 시도했지만 NSFileHandle을 반환하고 경로를 문자열로 지정해야합니다. 감사합니다.OS X 10.6의 프로세스 내에서 StandardErrorPath 가져 오기

p.s. StandardErrorPath는 launchd가 시스템 시작시 프로세스를 시작하는 데 사용하는 .plist에 설정됩니다. 과정은 객관적인 c로 작성된 묶음이다.

+0

혼란 스럽습니다. 당신 자신의 프로세스 나 NSTask (자식 프로세스)에 대한 표준 출력/에러를 원합니까? –

+0

나는 내 자신의 프로세스의 표준 출력/오류를 원한다. 나는 NSTask로하려고했던 것이 잘못되었다고 생각합니다. 내 자신의 프로세스에 대한 작업을 만든 다음 NSTask의 init 만 사용하여 standardError (NSFileHandle로)를 가져 오려고했습니다. – stan0

+0

NSTask는 새 프로세스를 시작하기위한 것입니다. 기존 프로세스에 대해 하나를 작성할 수 없습니다. –

답변

1

아니요. 물론 엄밀히 말하면 OS로 많은 해커를 사용하면되지만 그렇지 않아야합니다. 표준 스트림의 경로를 결정하고 경로를 열고 쓰기/읽기를해서는 안됩니다.

표준 입력/출력/오류는 파일과 관련이 없습니다. 파일 핸들은 파일 시스템의 경로와 반드시 연관 될 필요는 없지만 파일 핸들과 본질적으로 연관되어 있습니다. 이것들은 경로의 개념에 대한 의도적 인 추상화이므로 프로그램은 실제 경로를 신경 쓰지 않고도 표준 입력/출력/오류에 항상 쓸 수 있습니다. 이렇게하면 경로의 선택은 프로그램 자체가 아니라 프로그램 사용자 측에서 수행됩니다. 이 StandardErrorPath이 개념이있다 볼 때

무엇 launchd가 수행합니다

  1. 가 초기화 절차의 일환으로, 그것은 StandardErrorPath에 경로를 열어, 파일 기술자를 얻을.
  2. 앱을 실행하여 해당 파일 설명자를 앱의 "표준 오류 파일 설명자"로 설정합니다. 이 표준 오류에 기록하고 싶은

응용 프로그램은,해야 단지 하지가 표준 오류에 대한 파일 경로를 확인하고 그것에 작성하려고 표준 오류, 쓰기.

+0

요점은 프로세스 시작시 StandardError/OutputPath로 주어진 로그 파일의 이름을 바꾸는 것이 었습니다. 이렇게하면 로그에 대해 별도의 파일이 생성됩니다 (예 : 각 날짜). 어쨌든 분명히 해결 방법을 생각해야합니다. 답변 해 주셔서 감사합니다. – stan0

+0

나는 본다. 그렇다면 왜'syslog' 나'asl'을 사용하지 않으시겠습니까? 나는 바퀴를 다시 발명하지 않는 것을 선호한다. – Yuji

관련 문제