Выполнить команду терминала из приложения Какао - PullRequest
198 голосов
/ 05 января 2009

Как я могу выполнить команду терминала (например, grep) из моего приложения Objective-C Cocoa?

Ответы [ 12 ]

2 голосов
/ 11 июля 2011

Если для команды терминала требуется привилегия администратора (она же sudo), вместо нее используйте AuthorizationExecuteWithPrivileges. Следующее создаст файл с именем "com.stackoverflow.test" является корневым каталогом "/System/Library/Caches".

AuthorizationRef authorizationRef;
FILE *pipe = NULL;
OSStatus err = AuthorizationCreate(nil,
                                   kAuthorizationEmptyEnvironment,
                                   kAuthorizationFlagDefaults,
                                   &authorizationRef);

char *command= "/usr/bin/touch";
char *args[] = {"/System/Library/Caches/com.stackoverflow.test", nil};

err = AuthorizationExecuteWithPrivileges(authorizationRef,
                                         command,
                                         kAuthorizationFlagDefaults,
                                         args,
                                         &pipe); 
2 голосов
/ 05 января 2009

Или, поскольку Objective C - это просто C с некоторым слоем OO сверху, вы можете использовать составные части posix:

int execl(const char *path, const char *arg0, ..., const char *argn, (char *)0);
int execle(const char *path, const char *arg0, ..., const char *argn, (char *)0, char *const envp[]);
int execlp(const char *file, const char *arg0, ..., const char *argn, (char *)0);
int execlpe(const char *file, const char *arg0, ..., const char *argn, (char *)0, char *const envp[]);
int execv(const char *path, char *const argv[]);
int execve(const char *path, char *const argv[], char *const envp[]);
int execvp(const char *file, char *const argv[]);
int execvpe(const char *file, char *const argv[], char *const envp[]); 

Они включены в заголовочный файл unistd.h.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...