C Programmation

Codage avec fork et exec par exemple en c

Codage avec fork et exec par exemple en c
Le titre de notre article contient deux fonctions différentes du langage C qui se produisent lors de l'exécution de n'importe quel programme dans notre système. Malheureusement, il n'y a aucune possibilité de se produire plus d'un programme à la fois en C. Une seule tâche peut se produire à un moment donné, ce qui signifie qu'elle ne permet pas l'exécution de programmes simultanés. Il vous fait attendre la fin d'un processus pour exécuter l'autre. Pour éviter ce problème de dépannage, vous devrez peut-être développer votre programme dans le bon sens, en étant un bon développeur. Linux fork() est utilisé pour surmonter l'attente et permettre la concurrence dans votre système. Il aide à dupliquer un nouveau processus et en crée un nouveau en appelant le processus dupliqué. Le nouveau processus est le processus enfant, et le précédent est appelé le processus parent.

Considérant que, la fonction exec () est utilisée pour changer le programme existant actuel avec le nouveau. Ce remplacement se fait en apportant des modifications au contenu d'un programme ou d'un fichier. Ainsi, la différence entre fork et exec est que fork crée un nouveau processus à partir du processus existant, et exec est utilisé pour remplacer le programme existant en en créant un nouveau.

Conditions préalables

Pour exécuter n'importe quel programme c sur votre système Linux, nous devons y installer quelques prérequis. Accédez au terminal en utilisant la méthode de raccourci Ctrl+Alt+T. Maintenant, écrivez les commandes suivantes pour installer les pages de manuel.

$ sudo apt install manpages-dev

Il installera toutes les pages correspondantes.

À l'avenir, pour exécuter un programme sur Linux, vous devez installer un compilateur de code. Qui est utilisé pour compiler le code et l'exécuter. À cette fin, nous installerons des référentiels GCC dans notre système.

$ sudo apt installer GCC

Codage avec exec en c

Comme nous avons installé les pages de manuel sous Linux, nous utiliserons la commande suivante pour voir la description concernant exec. L'exemple de syntaxe principal est le suivant :

Syntaxe

Exec (chemin/fichier, argv );

Ici, nous avons utilisé le "unistd.h" en-tête car il contient toutes les informations des familles de fonction exec.

$ man exec

Maintenant, dans l'image citée ci-dessus, vous pouvez observer les types d'exec. Ce sont la famille des fonctions exec. Chacun est destiné à une fonction différente suivant la même base, « exec."

Exemple: Maintenant, en allant plus loin, nous allons décrire la fonctionnalité d'exec à l'aide d'un exemple. Nous prendrons une fonction d'exec pour démontrer son fonctionnement, qui est "execv." Dans un premier temps, nous allons créer deux fichiers avec l'extension ".c.” Après leur création, nous y écrirons les codes respectifs et les exécuterons pour voir le résultat.

Considérons un nom de fichier « sample4.c". Veuillez l'ouvrir et utiliser le code suivant. Dans ce code, nous avons utilisé execv d'une manière particulière citée ci-dessous.

Execv ("./sample4copy" , arguments);

La première partie contient le nouveau chemin du répertoire, et la deuxième partie montre le tableau des arguments en tant que paramètre que nous avons passé.

Échantillon4.c

Tout d'abord, nous avons imprimé l'identifiant du processus en cours. Deuxièmement, nous avons créé un tableau de caractères ayant NULL à la fin pour la terminaison. Troisièmement, nous avons appelé la fonction sample4copy.

Sample4copy.c

Lorsque nous appelons la fonction exec(), l'image de processus est modifiée. L'image citée ci-dessous montre le code de sample4copy.c.

Ici, nous n'avons utilisé que des instructions print pour obtenir l'identifiant du processus en cours.

La sortie des codes respectifs peut être obtenue en utilisant les commandes suivantes.

$ GCC-o échantillon4 échantillon4.c
$ GCC -o sample4copy sample4copy.c
$ ./échantillon4

Comme nous l'avons décrit précédemment, le mot "GCC" est utilisé pour compiler le code, et après la compilation, le code est exécuté avec succès.

Selon l'image, le PID de sample4.c est affiché en premier tel qu'il a été déclaré avant l'appel exec. Ensuite, après l'appel de la fonction exec(), les deux instructions d'impression du fichier sample4copy.c est exécuté où getpid() est utilisé pour obtenir l'identifiant du processus.

Codage avec une fourchette en c

La fonction fork() crée le processus enfant à partir du processus parent. Il contient également deux en-têtes, y compris les informations de fourche qu'il contient.

Syntaxe:

Pid_t fork(void);

Nous pouvons utiliser la page de manuel pour obtenir de l'aide sur l'utilisation

$ homme fourchette

Exemple: Considérons maintenant un exemple en créant un fichier « sample3.c". Nous allons entrer le code à l'intérieur du fichier. Selon le code, nous avons défini le statut de la fourchette comme forkrank.

Échantillon3.c

Nous avons utilisé l'instruction "if-else" pour appliquer la condition. Des commandes d'impression simples sont déclarées ici pour aider à la compréhension du concept fork(). Forkrank est d'abord déclaré comme 0 puis -1. Avec un fork(), il y a maintenant deux processus qui fonctionnent simultanément. La sortie peut être obtenue en utilisant le même code que celui utilisé ci-dessus dans l'exemple d'exécution.

$ GCC -o échantillon3.c
$./échantillon3

La sortie montre que le processus enfant est exécuté plus tôt que le parent lorsque le processus parent attendait. La fonction d'attente implique qu'elle fait attendre la fonction parente à moins que l'un de tous les processus enfants ne soit terminé.

Appels système Fork et Exec collectivement

Ici, nous allons prendre deux fichiers nommés "sample1.c" et "échantillon2.c". Tout d'abord, ouvrez le fichier sample1.c et écrivez le code qui est annexé ci-dessous dans l'image. Nous avons utilisé ici l'appel système fork() ; lorsque le processus enfant est créé, p sera affecté avec 0. Lors de l'utilisation de l'appel système exec, le sample1.c sera remplacé par sample2.c.

Échantillon1.c

Échantillon2.c

Semblable aux exemples décrits ci-dessus, le fichier sample2 contiendra les instructions printf. Dans l'échantillon1.c, la première commande d'impression est exécutée en premier, puis la fonction fork est appelée, lorsque p== 0, alors la partie enfant est exécutée et sample2.c sera exécuté. La sortie contiendra GCC pour compiler les deux fichiers. Ici l'échantillon parent1.c id et sample2.c id est différent car ils sont parent et enfant.

Conclusion

Dans cet article, nous avons utilisé à la fois fork et exec séparément et collectivement pour comprendre facilement l'utilisation et le concept. J'espère que ce tutoriel contient suffisamment de contenu qui vous permettra d'accéder à l'escalade de vos connaissances.

Remappez les boutons de votre souris différemment pour différents logiciels avec X-Mouse Button Control
Peut-être que vous avez besoin d'un outil qui pourrait faire changer le contrôle de votre souris avec chaque application que vous utilisez. Si tel est...
Examen de la souris sans fil Microsoft Sculpt Touch
J'ai lu récemment sur le Microsoft Sculpt Touch souris sans fil et j'ai décidé de l'acheter. Après l'avoir utilisé pendant un certain temps, j'ai déci...
Trackpad et pointeur de souris à l'écran AppyMouse pour tablettes Windows
Les utilisateurs de tablettes ratent souvent le pointeur de la souris, surtout lorsqu'ils ont l'habitude d'utiliser les ordinateurs portables. Les sma...