Я - новичок C++.
Я хотел бы создать небольшие программы, которые взаимодействуют с операционной системой (использующий Kubuntu Linux). До сих пор я не смог определить местоположение любого учебного руководства или руководства, чтобы заставить C++ взаимодействовать через интерфейс с ОС.
В PHP я могу использовать должностное лицо команды () или оператор обратной галочки для запуска команд, обычно выполняемых в консоли. Как я могу сделать подобные вещи в C++? Как я могу заставить свою программу C++ выполнять какую-либо другую команду? Как я могу получить вывод таких команд?
Спасибо.
Вы можете использовать команду system ()
в stdlib
для выполнения системных команд:
#include <stdlib.h>
int main() {
system("ls -l");
}
system ()
возвращает int
в качестве своего возвращаемое значение, но значение int зависит от системы. Если вы попытаетесь использовать команду, которой не существует, вы получите стандартный вывод «нет такой команды» и обычно ненулевое возвращаемое значение. (Например, запуск system ("ls -l");
на моем компьютере с Windows XP здесь возвращает значение 1.
Вы можете использовать system()
, как было указано ранее, или вы можете использовать библиотеки, предоставляющие доступ к стандартному POSIX API. unistd.h и The GNU C Library включают множество функций для взаимодействия с ОС. Возможности использования этих библиотек безграничны, поскольку вы можете реализовать функциональные возможности самостоятельно. Простой пример: сканирование каталога на наличие текстовых файлов с помощью scandir()
и вывод содержимого файлов.
You can use system()
to execute arbitrary commands but, if you want to easily control the input and output with the program, you should look into popen()
.
For even more control, you can look into doing exactly what a shell might do, creating some extra file descriptors, forking to start another process, setting up file descriptors 0, 1 and 2 (input, output and error) in that process to connect them to your original process file descriptors then exec'ing the program you want to control. This isn't for the faint of heart :-)