Выдача системных команд в Linux с C, C ++

Я знаю, что в приложении DOS / Windows вы можете выдавать системные команды из кода, используя строки, такие как:

system("pause"); 

или

 system("myProgram.exe"); 

… от stdlib.h. Есть ли подобная команда Linux, и если это так, какой файл заголовка я бы нашел?

Кроме того, это считается плохой практикой программирования? Я рассматриваю попытку получить список загруженных модhive ядра с помощью команды lsmod . Это хорошая идея или плохая идея? Я нашел несколько веб-сайтов, которые, казалось, рассматривали системные вызовы (по крайней мере, системный («пауза»);) в отрицательном свете.

    Неудивительно, что команда по-прежнему

     system("whatever"); 

    и заголовок все еще stdlib.h . Название этого заголовочного файла означает «стандартная библиотека», что означает, что он находится на каждой стандартной платформе, поддерживающей C.

    И да, вызов system() часто является плохой идеей. Обычно есть более программные способы делать вещи.

    Если вы хотите увидеть, как работает lsmod , вы всегда можете найти исходный код и посмотреть, какие именно основные системные вызовы они делают. Затем используйте эти вызовы самостоятельно.

    Быстрый поиск Google включает эту ссылку , которая указывает, что lsmod считывает содержимое /proc/modules .

    system – плохая идея по нескольким причинам:

    • Ваша программа приостанавливается до завершения команды.
    • Он запускает команду через оболочку, а это значит, что вам нужно беспокоиться о том, что строка, которую вы передаете, безопасна для оценки оболочки.
    • Если вы попытаетесь запустить команду backgrounded с помощью & , она станет процессом внука и станет сиротой и принята процессом init (pid 1), и после этого вы не сможете проверить ее статус.
    • Невозможно прочитать выход команды обратно в вашу программу.

    Для первой и последней проблемы popen является одним из решений, но не затрагивает другие проблемы. Вы действительно должны использовать fork и exec (или posix_spawn ) самостоятельно для запуска любой внешней команды / программы.

    Ну, lsmod делает это, анализируя файл /proc/modules . Это был бы мой предпочтительный метод.

    Я думаю, что вы ищете fork и exec.

    Давайте будем гением компьютера.