header_medi8

ビットコイン取引高日本一の仮想通貨取引所 coincheck bitcoin

2016年11月19日土曜日

Objective-C からコマンドを実行する方法

Objective-C からUnixコマンドを実行したいことがあったので調べてみた。


/**
 * @brief  UNIXコマンドを実行する.
 * @param  [in] command_path   実行するコマンドのパス.
 * @param  [in] args           引数リスト.
 */
- (NSData*)doCommand:(NSString*)command_path args:(NSArray*)args {
    NSTask *task = [[NSTask alloc] init];

    // 標準出力用
    NSPipe *out_pipe = [NSPipe pipe];
    [task setStandardOutput:out_pipe];

    // 標準error
    NSPipe *err_pipe = [NSPipe pipe];
    [task setStandardError:err_pipe];

    // Task に command のパスと引数を設定
    [task setLaunchPath:command_path];
    [task setArguments:args];

    // 設定したコマンドを設定した引数で実行
    [task launch];

    // 標準出力に設定した Pipe からデータを取得する.
    NSData *data = [[out_pipe fileHandleForReading] readDataToEndOfFile];
    return data;
}

ここでは例として、PATH を取得する以下のコマンドを実行してみることにします
uroshika$ echo $PATH 

これをObjective-Cから実行するには、
- (void)getPath {
    NSString* command_path = @"/bin/echo";
    NSArray* args = @[@"$PATH"];
    NSData *data = [self doCommand:command_path args:args];
    NSString* result = @"";
    if (data != nil && [data length]) {
        result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
    }
}