2011-11-07 9 views
0

端末コマンドを実行する必要があるCocoaアプリケーションを開発しています。
Cocoa - ファイルの最後にいくつかのバイトを追加します。

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のための引数であります。

この例では、おそらくシェルを使ってこれを行うのではなく、Cocoaやプレーン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

関連する問題