2011-11-07 7 views
0

터미널 명령 실행이있는 코코아 응용 프로그램을 개발하고 있어요 말에 일부 바이트를 추가합니다.
코코아 - 파일

printf "\xc5\x20\x00\x00" >> aFile.txt 

내가 NSTask와 시도 (하지만 인수를 분할하는 방법을 잘 모르겠어요) : 이러한 모습 중 하나는 좋아

NSTask *task = [[NSTask alloc] init]; 
[task setLaunchPath:@"/usr/bin/printf"]; 
[task setArguments:[NSArray arrayWithObjects:@"\"\\xc5\\x20\\x00\\x00\"", 
              @">>", 
              @"aFile.txt", nil]]; 
[task launch]; 

내가 할 모든은 다음과 같습니다

printf: missing format character 

그래서 ">>"는 printf 인수가 아니라 내부 터미널 명령이라고 생각합니다.

Objective C에서 해당 명령을 어떻게 시뮬레이트 할 수 있습니까?

답변

1

당신은 맞다는 >> 토큰은 쉘 기능되지는 printf의 인자이다 .

이 예제에서, 나는 아마 쉘을 사용하여 이것을하지 않고 코코아 나 일반 C (stdio.h와 함께)에서 코드를 작성할 것입니다.

그러나 쉘 >> 명령을 사용하려면 해당 행을 쉘 프로세스로 보내면 >>으로 올바르게 해석됩니다.

NSTask *task = [[NSTask alloc] init]; 
[task setLaunchPath:@"/bin/bash"]; 
[task setArguments:[NSArray arrayWithObjects:@"-c", 
              @"printf \"\xc5\x20\x00\x00\" >> aFile.txt", 
              nil]]; 
[task launch]; 
+0

감사합니다 !!!!!! 완벽하게 작동합니다 :) – Oneiros

4

당신은 NSTask 방법에 관심이있을 수는 :

- (void)setStandardOutput:(id)file 

NSFileHandle 방법에

는 :

+ (id)fileHandleForWritingAtPath:(NSString *)path 
- (unsigned long long)seekToEndOfFile 
+0

대단히 감사합니다. 작동합니다. 하지만 ... 문제가 있습니다 : "xc5x20x00x00"을 "√"대신 txt 파일에 넣으십시오. 터미널에서 해당 명령을 실행하면 얻을 수 있습니다. – Oneiros

+0

아마도'\\\'가 너무 많습니까? – mouviciel