| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Программирование под Unix/Linux > shell из программы |
| Автор: devmstr 9.11.2006, 22:47 |
| Я новичек в программировании под Unix(Linux), поэтому не пинайте меня очень сильно. Как мне из своей C программы выполнить какою-нибудь команду, ну например ls, и получить обратно результат. Помогите, пожайлуста. |
| Автор: BobiKK 9.11.2006, 23:02 |
| Наверное, стандартный механизм fork-and-exec. Поищите какие-нибудь статейки по этому ключевому слову. Наверняка там будет лучше и глубже расписан этот механизм, чем здесь расскажут. |
| Автор: MAKCim 9.11.2006, 23:50 | ||
| devmstr, кратко
|
| Автор: MAKCim 10.11.2006, 11:15 | ||
можешь еще popen, pclose попробовать
|
| Автор: BobiKK 10.11.2006, 15:46 | ||
А как через system получить результат выполения программы? |
| Автор: devmstr 11.11.2006, 10:20 | ||
| MAKCim Громадное спасибо. Именно то, что мне нужно. Взяв за основу ваш пример и разобравшись в том, что мне нужно использовать fork и execlp я написал свой. Все работает. А можно вопрос по Вашему листингу? Какое предназначение
|
| Автор: MAKCim 11.11.2006, 10:39 | ||
cоздание канала грубо говоря создание буфера обмена между двумя родственными процессами pipe() возвращает 2 дескриптора - на запись и на чтение, собственно эти операции (read/write на дескрипторах) синхронизируются ядром, потому канал - хороший способ взаимодествия дочернего и родительского процессов при передаче небольших по объему данных (буфер канала обычно не сильно велик) Если в примере не использовать канал - весь вывод ls пойдет на STDOUT_FILENO (по умолчанию либо терминал, либо псевдотерминал для X) и мы не сможем обработать вывод |
| Автор: vdim 10.9.2008, 05:39 |
| А могут ли способы через popen либо через execlp передать более чем 4096 байт? |
| Автор: MAKCim 10.9.2008, 07:38 | ||
могут |