здравствуйте
подскажите как из чистого си вызвать nix программу с атрибутами, и главное получить то, что программа пишет в консоль запихать в переменную (однострочный результат, хотелось бы запихнуть в char*).
и/или как провернуть такое с python скриптом (хотелось бы знать оба варианта. 1й предпочтительнее)
>и/или как провернуть такое с python скриптом (хотелось бы знать оба варианта.
>1й предпочтительнее)ф-ция system().
>>и/или как провернуть такое с python скриптом (хотелось бы знать оба варианта.
>>1й предпочтительнее)
>
>ф-ция system().Функция system передает заданную строку string к интерпре-
татору команд и обрабатывает эту строку как команду MS DOS. Функ-
ция system ссылается на переменные окружения COMSPEC и PATH, что-
бы расположить файл COMMAND.COM, который используется при выпол-
нении команды string.Если string успешно отработала, функция system возвращает
значение 0. Возвращаемое значение -1 свидетельствует об ошибке и
errno устанавливается в одно из следующих значений...это не то, что мне нужно
>Функция system передает заданную строку string к интерпре-
>татору команд и обрабатывает эту строку как команду MS DOS. Функ-
>ция system ссылается на переменные окружения COMSPEC и PATH, что-
>бы расположить файл COMMAND.COM, который используется при выпол-
>нении команды string.Какой нахрен command.com?
>это не то, что мне нужно
Ничто не будет возвращать char*, потому что это был бы идиотизм. На нижнем уровне это делается через pipe+fork (переправляем stdout/stderr в pipe в ребенке, в родителе читаем сколько надо) + wait. popen это все фактически обертывает в одну функцию.
>подскажите как из чистого си вызвать nix программу с атрибутами, и главное
>получить то, что программа пишет в консоль запихать в переменную (однострочный
>результат, хотелось бы запихнуть в char*).popen
>popenспасибо
сделал так
OutStream = popen(cmd, "r");
BashCmdResult = fgets(buffer,40,OutStream);
>здравствуйте
>подскажите как из чистого си вызвать nix программу с атрибутами, и главное
>получить то, что программа пишет в консоль запихать в переменную (однострочный
>результат, хотелось бы запихнуть в char*).простейший вариант, если не нужен вывод в stderr, это использование popen(), всё очень просто и красиво; о если же нужен и stderr, то задача усложняется в разы: pipe() + fork() + dup(); если требуется ещё и контролировать коды возврата, придётся использовать и waitpid() пару раз (с NOHANG для чтения stdout/stderr из пайпов и без оного - для получения корректного кода возврата). И наличие данных в пайпах конечно нужно поллировать, чем душе угодно