Добрый вечер! Возникла проблема:
Пишу консольное приложение в qt creator. От пользователя получаю строку:"ls namefolder", или подобную команду. Нужно вызвать функцию, позволяющую выполнить эту команду Linux и вывести результат пользователю. Полазила по интернету, что-то ничего подобного не могу найти.
Пожалуйста, помогите!!
12.11.12 21:53: Перенесено модератором из 'C/C++' — Кодт
MI>Пожалуйста, помогите!!
Начни с изучения команд system и popen.
Здравствуйте, MartIra, Вы писали:
MI> Пишу консольное приложение в qt creator.
Уже смешно.
MI> От пользователя получаю строку:"ls namefolder", или подобную команду. Нужно вызвать функцию, позволяющую выполнить эту команду Linux и вывести результат пользователю. Полазила по интернету, что-то ничего подобного не могу найти.
man popen
man system
man fork
man exec
MI>Пожалуйста, помогите!!
man "не прогуливать лекции"
Здравствуйте, MartIra, Вы писали:
MI>Добрый вечер! Возникла проблема:
MI> Пишу консольное приложение в qt creator. От пользователя получаю строку:"ls namefolder", или подобную команду. Нужно вызвать функцию, позволяющую выполнить эту команду Linux и вывести результат пользователю. Полазила по интернету, что-то ничего подобного не могу найти.
MI>Пожалуйста, помогите!!
Программирование под линукс состояит из нескольких слабосвязанных языков и сопуствующих им инструментариев:
1. Ядро и социально близкие к ядру функции — написаны на классическом чистом C.
2. Базовая пользовательская среда, то есть GNU-окружение — на объектно-ориентированном C ( не путать с C++, это именно ООП в C ).
3. Командная оболочка — имеет свой развитый язык и свой подход к программированию. Используется широко и часто, к примеру такая системная функция как запуск сервисов (демонов) реализуется через дикую смесь из классических бинарников и скриптов командной оболочки.
4. Графические тулкиты — отдельный зоопарк языков, библиотек, парадигм и подходов. Начиная от классического C (Xlib), ООП-C (GTK), C++ (Qt,wxWidgets) и т.п.
То есть, программист вынужден работать не с каким-то одним стэком технологий (набором инструментов и практик), а с кучей разных стэков, который связаваны между собой синей изолентой и деревянными гвоздями. В принципе, всемирно популярный Qt претендует на то, чтобы большую часть этих ржавых строительных лесов и гнилых брёвен замаскировать от программиста, но это в принципе невозможно.
К чему это я всё, собственно? А к тому что такие вопросы при программирвонии на линуксе (даже при программировании хэлловорлдов) будут возникать постоянно. И для того чтобы научиться самому(самой) отвечать на эти вопросы, придётся, помимо собственно языков программирования, освоить кучу вещей. Начиная от знания внутреннего устройства ядра Linux, заканчивая заморочками GNU-окружения и знанием стандартных UNIX-комманд. Без этого знания ни увидеть всю картину, ни даже найти документацию по интересующему функционалу не получиться. Будет малопродуктивное гугление и "глупые" вопросы на форумах.
По сабжу:
1. Вы что там, шэлл свой пишете?
2. Через QProcess ( метод для Qt )
3. Через fork/exec ( метод для C, подробности искать в man fork, man exec )
4. Через popen ( метод для C, подробности искать в man )
4. Через system ( метод для C, man )
5. Через семейство функций g_spawn* из glib (подробности искать в документации glib)
6. домашнее здание — список продолжить самомстоятельно
Здравствуйте, Аноним, Вы писали:
А>Программирование под линукс состояит из нескольких слабосвязанных языков и сопуствующих им инструментариев:
А>1. Ядро и социально близкие к ядру функции — написаны на классическом чистом C.
А>2. Базовая пользовательская среда, то есть GNU-окружение — на объектно-ориентированном C ( не путать с C++, это именно ООП в C ).
Вообще-то ядро тоже — объектно-ориентированный C. Например, код вида
if (filp->f_op && filp->f_op->flush)
retval = filp->f_op->flush(filp, id);
является стопроцентной реализацией вызова виртуальной функции у объекта согласно его интерфейсу
и для этого не нужно рисовать на каких-нибудь Glib.
А>То есть, программист вынужден работать не с каким-то одним стэком технологий (набором инструментов и практик), а с кучей разных стэков, который связаваны между собой синей изолентой и деревянными гвоздями. В принципе, всемирно популярный Qt претендует на то, чтобы большую часть этих ржавых строительных лесов и гнилых брёвен замаскировать от программиста, но это в принципе невозможно.
А>К чему это я всё, собственно? А к тому что такие вопросы при программирвонии на линуксе (даже при программировании хэлловорлдов) будут возникать постоянно. И для того чтобы научиться самому(самой) отвечать на эти вопросы, придётся, помимо собственно языков программирования, освоить кучу вещей. Начиная от знания внутреннего устройства ядра Linux, заканчивая заморочками GNU-окружения и знанием стандартных UNIX-комманд. Без этого знания ни увидеть всю картину, ни даже найти документацию по интересующему функционалу не получиться. Будет малопродуктивное гугление и "глупые" вопросы на форумах.
Это всё-таки перебор.