Какао - добавить несколько байтов в конце файла - PullRequest
0 голосов
/ 07 ноября 2011

Я разрабатываю приложение Какао , которое должно выполнить некоторые команды терминала . Один из них выглядит так:

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, а команда внутреннего терминала.

Как мне смоделировать эту команду в Задаче C?

Ответы [ 2 ]

4 голосов
/ 07 ноября 2011

Вас может заинтересовать NSTask метод:

- (void)setStandardOutput:(id)file

и в NSFileHandle методы:

+ (id)fileHandleForWritingAtPath:(NSString *)path
- (unsigned long long)seekToEndOfFile
1 голос
/ 07 ноября 2011

Вы правы, токен >> является функцией оболочки, а не аргументом для printf.

В этом примере я бы, вероятно, не использовал оболочку для этого, скорее, я бы написал код для этого в Какао или на простом C (с stdio.h).

Однако, чтобы использовать команду shell >>, вы можете отправить строку в процесс оболочки, который будет правильно интерпретировать >>.

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