gpt4 book ai didi

objective-c - 如何使用 posix_spawn 替换已弃用的 'system' 以在 Objective-C 中启动 opendiff?

转载 作者:太空狗 更新时间:2023-10-30 03:28:36 29 4
gpt4 key购买 nike

这行代码:

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/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com