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 встановити GCC

Кодування за допомогою exec в c

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

Синтаксис

Exec (назва шляху / файл, argv);

Тут ми використали “unistd.h ”заголовок, оскільки він містить всю інформацію про сімейства функцій exec.

$ man exec

Тепер на згаданому вище зображенні ви можете спостерігати типи exec. Це сімейство виконуваних функцій. Кожен призначений для іншої функції, яка слідує одній і тій же основі, “exec."

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

Розгляньте ім’я файлу „sample4.c ”. Будь ласка, відкрийте його та використовуйте наступний код. У цьому коді ми використовували execv певним чином, наведеним нижче.

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

Перша частина містить новий шлях до каталогу, а друга частина відображає масив аргументів як переданий нами параметр.

Зразок4.c

Перш за все, ми надрукували ідентифікатор поточного процесу. По-друге, ми створили масив символів із кінцевим значенням NULL для закінчення. По-третє, ми назвали функцію sample4copy.

Зразок4копія.c

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

Тут ми використовували лише оператори друку, щоб отримати ідентифікатор поточного процесу.

Вивід відповідних кодів можна отримати за допомогою наступних команд.

$ GCC-o зразок4 зразок4.c
$ GCC -o sample4copy sample4copy.c
$ ./ зразок4

Як ми вже описали раніше, слово "GCC" використовується для компіляції коду, і після компіляції код виконується успішно.

Відповідно до зображення, ПІД зразка4.Файл c відображається першим, як він був оголошений перед викликом exec. Потім після виклику функції exec () обидва оператори друку файлу sample4copy.c виконується там, де getpid () використовується для отримання ідентифікатора процесу.

Кодування виделкою в с

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

Синтаксис:

Вилка Pid_t (порожнеча);

Ми можемо використати сторінку довідки для допомоги у використанні

$ людина вилка

Приклад: Тепер розглянемо приклад, створивши файл “sample3.c ”. Ми введемо код всередині файлу. Відповідно до коду, ми встановили статус форка як forkrank.

Зразок3.c

Ми застосували твердження “якщо-ще”, щоб застосувати умову. Тут описані прості команди друку, які допоможуть зрозуміти концепцію fork (). Forkrank спочатку оголошується як 0, а потім -1. За допомогою fork () тепер існує два процеси, які працюють одночасно. Вихідні дані можна отримати за допомогою того самого коду, що і вище в прикладі exec.

$ GCC -o зразок3.c
$./ зразок3

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

Виклики системи Fork та Exec колективно

Тут ми візьмемо два файли з назвою „sample1.c ”та“ sample2.c ”. Спочатку відкрийте файл sampl1.c та напишіть код, доданий нижче на зображенні. Ми використовували тут системний виклик fork (); при створенні дочірнього процесу p буде присвоєно 0. Під час використання системного виклику exec sample1.c буде замінено на sample2.c.

Зразок1.c

Зразок2.c

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

Висновок

У цій статті ми використовували як fork, так і exec окремо та колективно, щоб легко зрозуміти використання та концепцію. Сподіваюсь, цей посібник містить достатній вміст, який призведе до доступу до ескалації ваших знань.

How to Show FPS Counter in Linux Games
Linux gaming got a major push when Valve announced Linux support for Steam client and their games in 2012. Since then, many AAA and indie games have m...
How to download and Play Sid Meier's Civilization VI on Linux
Introduction to the game Civilization 6 is a modern take on the classic concept introduced in the series of the Age of Empires games. The idea was fai...
How to Install and Play Doom on Linux
Introduction to Doom The Doom Series originated in the 90s after the release of the original Doom. It was an instant hit and from that time onwards th...