10 методов выполнения команд на C++ с примерами кода

Выполнение команд в программе C++ может быть полезно для различных целей, например для взаимодействия с операционной системой, запуска внешних программ или автоматизации задач. В этой статье блога мы рассмотрим десять различных методов выполнения команд на C++, а также приведем примеры кода для каждого метода.

Метод 1: использование функции system()

#include <cstdlib>
int main() {
    system("command_to_execute");
    return 0;
}

Метод 2: использование семейства функций exec()

#include <unistd.h>
int main() {
    execl("/bin/sh", "sh", "-c", "command_to_execute", NULL);
    return 0;
}

Метод 3: использование функции popen()

#include <stdio.h>
int main() {
    FILE* pipe = popen("command_to_execute", "r");
    if (pipe) {
        // Read the command output
        char buffer[128];
        while (!feof(pipe)) {
            if (fgets(buffer, 128, pipe) != NULL)
                printf("%s", buffer);
        }
        pclose(pipe);
    }
    return 0;
}

Метод 4. Использование функций fork() и exec()

#include <sys/types.h>
#include <sys/wait.h>
#include <unistd.h>
int main() {
    pid_t pid = fork();
    if (pid == 0) {
        // Child process
        execl("/bin/sh", "sh", "-c", "command_to_execute", NULL);
    } else if (pid > 0) {
        // Parent process
        wait(NULL);
    }
    return 0;
}

Метод 5. Использование функции CreateProcess() (только для Windows)

#include <windows.h>
int main() {
    STARTUPINFO si;
    PROCESS_INFORMATION pi;
    ZeroMemory(&si, sizeof(si));
    si.cb = sizeof(si);
    ZeroMemory(&pi, sizeof(pi));
    // Create child process
    CreateProcess(NULL, "command_to_execute", NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi);
    // Close process and thread handles
    CloseHandle(pi.hProcess);
    CloseHandle(pi.hThread);
    return 0;
}

Метод 6: использование функции execvp()

#include <unistd.h>
int main() {
    char* argv[] = {"command_to_execute", NULL};
    execvp(argv[0], argv);
    return 0;
}

Метод 7. Использование функции execv()

#include <unistd.h>
int main() {
    char* argv[] = {"command_to_execute", NULL};
    execv("/bin/sh", argv);
    return 0;
}

Метод 8: использование функции execle()

#include <unistd.h>
int main() {
    char* env[] = {NULL};
    execle("/bin/sh", "sh", "-c", "command_to_execute", NULL, env);
    return 0;
}

Метод 9: использование функции execve()

#include <unistd.h>
int main() {
    char* argv[] = {"command_to_execute", NULL};
    char* env[] = {NULL};
    execve("/bin/sh", argv, env);
    return 0;
}

Метод 10. Использование функции execvp() с пользовательскими переменными среды

#include <unistd.h>
int main() {
    char* argv[] = {"command_to_execute", NULL};
    char* env[] = {"VAR1=value1", "VAR2=value2", NULL};
    execvp(argv[0], argv, env);
    return 0;
}

В этой статье мы рассмотрели десять различных методов выполнения команд на C++. Каждый метод имеет свои преимущества и варианты использования, поэтому выберите тот, который лучше всего соответствует вашим конкретным требованиям. Используя эти методы, вы можете добавить в свои программы на C++ мощные возможности выполнения команд.