Кто-нибудь знает, как открыть терминал и выполнить несколько команд с помощью программы на Си?
У меня есть программа на C и другие наборы команд, выполняемых терминалом. Мне нужно объединить их в одну программу на C.
Я использую Ubuntu 10.04.
Спасибо!
Проверьте «man xterm», параметр -e. Затем в C вы можете:
система («xterm -e ls»)
Ваш вопрос может вводить в заблуждение.
Поскольку вы хотите выполнить все команды терминала в c-коде, возможно, у вас фактически есть только текстовый ввод / вывод с этими командами. Если это так, вам, вероятно, не нужен терминал.
Я использую popen, когда вывод программы (терминала) является текстовым потоком. Это, вероятно, самый простой в использовании. В качестве примера:
...
const char* cmndStr = "ls -lsa";
FILE* pipe = popen(cmndStr, "r");
...
Команда popen выполняет команду в cmndStr, и любой текст, записанный в стандартный вывод команд (ls -lsa), перенаправляется в канал, который затем становится доступным для чтения вашей C-программой.
popen открывает отдельный процесс (но без терминала для работы, просто канал)
«Форк» — это еще один способ запуска отдельного процесса с некоторым контролем над запущенными процессами «стандартный ввод / вывод», но, опять же, я думаю, что это не терминал.
С другой стороны, если ваш вывод не является простым текстовым потоком, возможно, вы можете обойтись выделенным экраном вывода, предназначенным только для вывода, чтобы приспособиться к особой активности вывода. Например, когда я работаю с ncurses:
Я вручную открываю терминал обычным способом, а в терминале
выполните команду «tty», чтобы узнать имя устройства, и
введите «cd», чтобы установить фокус на рабочий каталог.
dmoen @ C5: ~ $ tty
/ DEV / очки / 1
dmoen @ C5: ~ $ cd work
dmoen @ C5: ~ / работа $
Затем я запускаю свою программу (в другом tty) и сообщаю программе, какое устройство я хочу использовать для специального вывода (т.е. / dev / pts / 1) … Обычно я использую параметры командной строки, чтобы сообщить своей программе какие точки или дополнительные терминалы я хочу использовать, но существуют переменные окружения, каналы, перенаправление ввода / вывода и другие варианты.
Я не пытался (в последнее время) запустить терминал (как предложено smrt28), кроме как в оболочке. Я верю, что это будет работать, но я не вижу, как вывод команды терминала (ls в примере) будет доставлен обратно в вашу программу. попен тривиально доставляет текстовый поток.
Давным-давно я использовал устройство под названием «pty», которое работает как терминал, но я не помню, как его правильно подключить.
Есть набор команд ‘exec’ … см. Man exec. Чтобы подключить их обратно к вашей программе, вы, вероятно, будете работать с файлами или, возможно, перенаправлять ввод / вывод. Слишком много вариантов, чтобы перечислить здесь.
А также, возможно, вы можете соединить эти команды с вашей программой на языке c, используя каналы оболочки.