11

このコード行:

system("/Applications/Xcode.app/Contents/Developer/usr/bin/opendiff /Users/LukeSkywalker/Documents/doc1.rtf /Users/LukeSkywalker/Documents/doc2.rtf");

この警告が表示されます:

'system' is deprecated: first deprecated in iOS 8.0 - Use posix_spawn APIs instead.

posix_spawn について少し読んだことがありますが、posix_spawn を使用した同等のコード行がどのようになるかわかりません。

サンプルへのヘルプやリンクをいただければ幸いです。

4

2 に答える 2

16

を使用posix_spawn()して質問に答えます。

#include <spawn.h>
extern char **environ;

(...)

pid_t pid;
char *argv[] = {
    "/Applications/Xcode.app/Contents/Developer/usr/bin/opendiff",
    "/Users/LukeSkywalker/Documents/doc1.rtf",
    "/Users/LukeSkywalker/Documents/doc2.rtf",
    NULL
};

posix_spawn(&pid, argv[0], NULL, NULL, argv, environ);
waitpid(pid, NULL, 0);

または、NSTask を使用できます。

NSTask *task = [[NSTask alloc] init];
task.launchPath = @"/Applications/Xcode.app/Contents/Developer/usr/bin/opendiff";
task.arguments = [NSArray arrayWithObjects:
                  @"/Users/LukeSkywalker/Documents/doc1.rtf",
                  @"/Users/LukeSkywalker/Documents/doc2.rtf",
                  nil];
[task launch];
[task waitUntilExit];

同期する必要がない場合は、呼び出しを削除してくださいwaitpid()(必ず別の場所で呼び出してください。そうしないと、アプリが終了するまでゾンビ プロセスになってしまいます) または[task waitUntilExit].

于 2015-01-05T15:03:42.480 に答える