OS X 10.6.8, Carbon, приложение C ++.
Я хочу запустить команду из оболочки и вернуть результат в виде строки, чтобы затем использовать в качестве параметра для другой функции.
df / | tail -n +2 | awk '{ print $1 }'
Но я не вижу NSTask-эквивалента для Carbon, C ++ и, насколько я могу найти, мне нужно было бы использовать Objective-C для использования NSTask
Я не вижу, что Boost есть что предложить.
Кто-нибудь может указать мне правильное направление?
РЕДАКТИРОВАТЬ: Итак, пытаясь вспомнить мои дни UNIX, как насчет использования popen
в режиме чтения и получения желаемых результатов из указателя файла?
Конечно, вы можете написать что-то вроде этого:
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);
Не забудьте добавить несколько проверок и дождаться дочернего процесса.
Но если вы можете использовать Какао, но не знаете, как объединить код C ++ и Objective-C — просто используйте Objective-C ++, помещая код в файл с расширением .mm.
Других решений пока нет …