作者热门文章
- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
这行代码:
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 的等效代码行会是什么样子。
如有任何帮助或样本链接,我们将不胜感激。
最佳答案
使用 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]
。
关于objective-c - 如何使用 posix_spawn 替换已弃用的 'system' 以在 Objective-C 中启动 opendiff?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27046728/
我是一名优秀的程序员,十分优秀!