Программирование на C

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

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

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

Предпосылки

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

$ sudo apt install manpages-dev

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

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

$ sudo apt install GCC

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

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

Синтаксис

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

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

$ man exec

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

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

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

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

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

Образец4.c

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

Sample4copy.c

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

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

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

$ GCC-o sample4 sample4.c
$ GCC -o sample4copy sample4copy.c
$ ./ sample4

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

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

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

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

Синтаксис:

Вилка Pid_t (недействительна);

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

вилка $ man

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

Образец3.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 образец1.c будет заменен на sample2.c.

Образец1.c

Образец2.c

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

Заключение

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

Левая кнопка мыши не работает в Windows 10
Если вы используете выделенную мышь со своим ноутбуком или настольным компьютером, но левая кнопка мыши не работает в Windows 10/8/7 по какой-то причи...
Курсор прыгает или перемещается случайным образом при наборе текста в Windows 10
Если вы обнаружите, что ваш курсор мыши прыгает или перемещается сам по себе, автоматически, случайным образом при вводе текста на ноутбуке или компью...
Как изменить направление прокрутки мыши и сенсорной панели в Windows 10
Мышь а также Сенсорная панельs не только упрощают вычисления, но и делают их более эффективными и требуют меньше времени. Мы не можем представить себе...