Углеродный эквивалент NSTask?

OS X 10.6.8, Carbon, приложение C++.

Я хочу запустить команду из оболочки и вернуть результат в виде строки, чтобы затем использовать ее в качестве параметра для другой функции.

df / | tail -n +2 | awk '{ print $1 }'

Но я не вижу эквивалента NSTask для Carbon, C++, и, насколько я могу найти, мне нужно будет использовать Objective-C для использования NSTask.

Я тоже не вижу, чтобы Boost мог что-то предложить.

Может ли кто-нибудь указать мне в правильном направлении?

РЕДАКТИРОВАТЬ: Итак, пытаясь вспомнить свои дни UNIX, как насчет использования popen в режиме чтения и получения результатов, которые я хочу, из указателя файла?


person Jasmine    schedule 28.03.2013    source источник


Ответы (1)


Конечно, вы можете написать что-то вроде этого:

int myPipe[2];
int err = pipe(&myPipe); // write to myPipe[1] in child, read from myPipe[0] in parent

int child_pid = fork();
if(child_pid == 0)
{
    err = dup2(myPipe[1], 1); // redirect standard output to the input of the pipe
    execl("/path/to/program", "arg1", "arg2");
}

int pipefd = myPipe[0];
char buffer[255];
err = read(pipefd, buffer, 255);

Не забудьте добавить несколько проверок и дождаться дочернего процесса.

Но если вы умеете использовать Cocoa, но не знаете, как соединить код C++ и Objective-C — просто используйте Objective-C++ размещение кода в файл с расширением .mm.

person cody    schedule 28.03.2013