Considerando che la funzione Exec () viene utilizzata per modificare l'attuale programma esistente con quello nuovo. Questa sostituzione viene eseguita apportando modifiche al contenuto di un programma o di un file. Quindi la dissomiglianza tra forcella e exec è che la forcella crea un nuovo processo dal processo esistente e il exec viene utilizzato per sostituire il programma esistente creando uno nuovo.
Prerequisiti
Per eseguire qualsiasi programma C sul tuo sistema Linux, dobbiamo installare alcuni prerequisiti su di esso. Vai al terminale usando il metodo di scelta rapida ctrl+alt+t. Ora scrivi i seguenti comandi per installare le pagine Man.
$ sudo apt install manpages-dev
Installerà tutte le pagine corrispondenti.
Andando avanti, per eseguire un programma su Linux, è necessario installare un compilatore di codice. Che viene utilizzato per compilare il codice ed eseguirlo. A tale scopo, installeremo repository GCC nel nostro sistema.
$ sudo APT Installa GCC
Codifica con exec in c
Dato che abbiamo installato le pagine di Man in Linux, useremo il seguente comando per vedere la descrizione relativa all'EXC. La sintassi del campione primario è la seguente:
Sintassi
Exec (pathname/file, argv);
Qui abbiamo usato il "UNISTD.H ”” in quanto contiene tutte le informazioni sulle famiglie della funzione Exec.
$ Man Exec
Ora nell'immagine sopra citata, puoi osservare i tipi di dirigenti. Queste sono la famiglia delle funzioni dirigenti. Ognuno è per una funzione diversa seguendo la stessa base, "Exec."
Esempio: Ora, muovendosi oltre, descriveremo la funzionalità del dirigente con l'aiuto di un esempio. Prenderemo una funzione di Exec per dimostrare il suo lavoro, che è "Execv."In primo luogo, creeremo due file con l'estensione di".C."Dopo la loro creazione, scriveremo rispettivi codici in essi ed esegueremo per vedere il risultato.
Considera un nome file “Esempio4.C". Aprilo e usa il seguente codice. In questo codice, abbiamo usato Execv in un modo particolare citato di seguito.
Execv ("./Sample4Copy ”, args);
La prima parte contiene il nuovo percorso di directory e la seconda parte mostra l'array degli argomenti come parametro che abbiamo superato.
Campione4.C
Prima di tutto, abbiamo stampato l'ID del processo corrente. In secondo luogo, abbiamo creato un array di caratteri che ha null alla fine per la terminazione. In terzo luogo abbiamo chiamato la funzione Sample4Copy.
Campione4copia.C
Quando chiamiamo la funzione Exec (), l'immagine di processo viene modificata. Di seguito l'immagine citata di seguito mostra il codice di Sample4Copy.C.
Qui abbiamo usato solo istruzioni di stampa per ottenere l'ID del processo corrente.
L'output dei rispettivi codici può essere ottenuto utilizzando i seguenti comandi.
$ GCC-O Sample4 Sample4.C
$ GCC -O Sample4Copy Sample4Copy.C
$ ./campione4
Come abbiamo descritto in precedenza, la parola "GCC" viene utilizzata per compilare il codice e, dopo la compilazione, il codice viene eseguito correttamente.
Secondo l'immagine, il PID di Sample4.Il file c viene mostrato per primo in quanto è stato dichiarato prima della chiamata exec. Quindi dopo la funzione Exec (), entrambe le istruzioni di stampa di File Sample4Copy.c viene eseguito dove getpid () viene utilizzato per ottenere l'ID del processo.
Codifica con una forchetta in c
La funzione fork () crea il processo figlio dal processo genitore. Contiene anche due intestazioni, comprese le informazioni sulla forcella.
Sintassi:
Fork pid_t (void);
Possiamo usare la pagina Man per chiedere aiuto nell'uso
$ man fork
Esempio: Ora considera un esempio creando un file “Esempio3.C". Inserteremo il codice all'interno del file. Secondo il codice, abbiamo impostato lo stato della forcella come forkrank.
Campione3.C
Abbiamo usato l'istruzione "if-else" per applicare la condizione. I semplici comandi di stampa sono dichiarati qui per aiutare a comprendere il concetto di fork (). Il forkrank viene dichiarato prima come 0 e poi -1. Con un fork (), ora ci sono due processi che funzionano contemporaneamente. L'output può essere ottenuto utilizzando lo stesso codice, utilizzato sopra nell'esempio.
$ Gcc -o campione3.C
$./campione3
L'output mostra che il processo figlio viene eseguito prima del genitore quando il processo genitore stava aspettando. La funzione di attesa implica che fa aspettare la funzione genitore a meno che uno di tutti i processi figlio non vengano terminati.
Chiamate del sistema forcine ed esecuzione collettiva
Qui prenderemo due file denominati "Sample1.C "e" Sample2.C". Innanzitutto, apri il file sampl1.c e scrivere il codice che viene aggiunto di seguito nell'immagine. Abbiamo usato il sistema di sistema fork () qui; Quando viene creato il processo figlio, P verrà assegnato con 0. Durante l'utilizzo di Exec System-Call, il campione1.c verrà sostituito con campione2.C.
Campione1.C
Campione2.C
Simile agli esempi discussi sopra, il file Sample2 conterrà le istruzioni Printf in esso. Nel campione1.C, il primo comando di stampa viene eseguito per primo, quindi viene chiamata la funzione fork, quando p == 0, quindi viene eseguita la parte figlio e campione2.il file c verrà eseguito. L'output conterrà GCC per compilare entrambi i file. Qui campione genitore1.C ID e campione2.c ID è diverso perché sono genitori e figlio.
Conclusione
In questo articolo, abbiamo usato sia la forcella che il dirigente separatamente e collettivamente per comprendere facilmente l'uso e il concetto. Spero che questo tutorial contenga un contenuto sufficiente che porterà all'accesso ad aumentare le tue conoscenze.