Кодирование с помощью fork и exec на примере c

Coding With Fork Exec Example C



Название нашей статьи содержит две разные функции языка C, которые возникают при запуске любой программы в нашей системе. К сожалению, в C. нет возможности одновременного выполнения нескольких программ. В конкретный момент времени может выполняться только одна задача, что означает, что параллельные программы не могут выполняться. Это заставляет вас ждать завершения одного процесса, чтобы выполнить другой. Чтобы избежать этой проблемы с устранением неполадок, вам, возможно, придется разработать свою программу в хорошем смысле, будучи хорошим разработчиком. Linux fork () используется для преодоления ожидания и обеспечения параллелизма в вашей системе. Это помогает дублировать новый процесс и создает новый, вызывая дублированный процесс. Новый процесс является дочерним процессом, а предыдущий называется родительским процессом.

В то время как функция exec () используется для замены текущей существующей программы на новую. Эта замена выполняется путем внесения изменений в содержимое программы или файла. Таким образом, различие между fork и exec состоит в том, что fork создает новый процесс из существующего процесса, а exec используется для замены существующей программы путем создания новой.







Предпосылки

Чтобы выполнить любую программу на языке c в вашей системе Linux, нам необходимо установить на нее некоторые предварительные условия. Перейдите в терминал, используя метод сочетания клавиш Ctrl + Alt + T. Теперь напишите следующие команды для установки страниц руководства.



$судоподходящийустановитьmanpages-dev



Он установит все соответствующие страницы.





Двигаясь вперед, чтобы запустить программу в Linux, вам необходимо установить компилятор кода. Это используется для компиляции кода и его выполнения. Для этого мы установим в нашу систему репозитории GCC.

$судоподходящийустановитьGCC



Кодирование с помощью exec на c

Поскольку мы установили справочные страницы в Linux, мы воспользуемся следующей командой, чтобы увидеть описание exec. Основной синтаксис образца следующий:

Синтаксис

Exec(путь/файл, argv);

Здесь мы использовали заголовок unistd.h, поскольку он содержит всю информацию о семействах функции exec.

$человек exec

Теперь на процитированном выше изображении вы можете увидеть типы exec. Это семейство функций exec. Каждый из них предназначен для разных функций, следующих за одной и той же базой, exec.

Пример: Теперь, двигаясь дальше, опишем функциональность exec на примере. Мы возьмем одну функцию из exec, чтобы продемонстрировать ее работу, а именно execv. Сначала мы создадим два файла с расширением .c. После их создания мы напишем в них соответствующие коды и выполним их, чтобы увидеть результат.

Рассмотрим имя файла sample4.c. Пожалуйста, откройте его и используйте следующий код. В этом коде мы использовали execv определенным образом, указанным ниже.

Execv(./sample4copy, аргументы);

Первая часть содержит новый путь к каталогу, а вторая часть показывает массив аргументов в качестве параметра, который мы передали.

Sample4.c

Прежде всего, мы распечатали идентификатор текущего процесса. Во-вторых, мы создали символьный массив с NULL в конце для завершения. В-третьих, мы вызвали функцию sample4copy.

Sample4copy.c

Когда мы вызываем функцию exec (), изображение процесса изменяется. На приведенном ниже изображении показан код sample4copy.c.

Здесь мы использовали только операторы печати, чтобы получить идентификатор текущего процесса.

Вывод соответствующих кодов может быть получен с помощью следующих команд.

$ GCC – o sample4 sample4.c
$ GCC –o sample4copy sample4copy.c
$./образец4

Как мы описали ранее, слово GCC используется для компиляции кода, и после компиляции код успешно выполняется.

Согласно изображению, сначала отображается PID файла sample4.c, поскольку он был объявлен перед вызовом exec. Затем после вызова функции exec () выполняются оба оператора печати файла sample4copy.c, где getpid () используется для получения идентификатора процесса.

Кодирование вилкой в ​​c

Функция fork () создает дочерний процесс из родительского процесса. Он также содержит два заголовка, включая информацию о вилке.

Синтаксис:

Pid_t форк(пустота);

Мы можем использовать справочную страницу для помощи в использовании

$человеквилка

Пример: Теперь рассмотрим пример, создав файл sample3.c. Введем код внутрь файла. Согласно коду мы установили статус вилки как forkrank.

Sample3.c

Мы использовали оператор if-else для применения условия. Здесь объявлены простые команды печати, чтобы помочь понять концепцию fork (). Forkrank сначала объявляется как 0, а затем как -1. С fork () теперь есть два процесса, которые работают одновременно. Вывод может быть получен с помощью того же кода, который использовался выше в примере exec.

$ GCC –o sample3.c
$./sample3

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

Системные вызовы Fork и Exec вместе

Здесь мы возьмем два файла с именами sample1.c и sample2.c. Сначала откройте файл sampl1.c и напишите код, который добавлен ниже на изображении. Здесь мы использовали системный вызов fork (); при создании дочернего процесса p будет присвоено значение 0. При использовании системного вызова exec sample1.c будет заменен на sample2.c.

Sample1.c

Sample2.c

Подобно примерам, рассмотренным выше, файл sample2 будет содержать в себе операторы printf. В sample1.c сначала выполняется первая команда печати, затем вызывается функция fork, при p == 0 выполняется дочерняя часть и запускается файл sample2.c. Вывод будет содержать GCC для компиляции обоих файлов. Здесь родительский идентификатор sample1.c и идентификатор sample2.c отличаются, потому что они являются родительскими и дочерними.

Заключение

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