Тоді як функція 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 окремо та колективно, щоб легко зрозуміти використання та концепцію. Сподіваюсь, цей посібник містить достатній вміст, який призведе до доступу до ескалації ваших знань.