Exemple 01:
Ouvrez et connectez-vous depuis Ubuntu 20.04 et lancez l'application nommée «Terminal» à partir de la zone d'activité. Cela pourrait être fait en utilisant un raccourci de clé simple «Ctrl + Alt + T» sur votre bureau. Créez un fichier de type C pour implémenter l'appel système PRCTL (), effectuez la commande affichée dans le snap en dessous.
$ touch prtcl.c
Après la création, ouvrons le fichier avec un éditeur GNU Nano selon l'instruction montrée.
$ nano prtcl.c
Ajoutez le code affiché dans l'image Snap en dessous dans le fichier GNU. Le code contient les fichiers d'en-tête nécessaires pour le fonctionnement d'un code PRCTL (). Ensuite, nous avons créé et défini 4 threads nommés Process1, Process2, Process3 et Process4. Les 4 processus ou fonctions contiennent le vide en tant que paramètre général ou de signature, mais cela pourrait être autre chose. Comme nous l'avons élaboré auparavant, le premier paramètre de l'appel du système «prctl ()» montrera ce que nous avons à faire avec la fonction d'appel. Nous avons donc appelé PRCTL () dans les 4 méthodes pour définir le nom d'un processus en utilisant l'argument "PR_SET_NAME". Après le sommeil de 2 secondes, la fonction PUTS sera exécutée pour définir le nom d'un processus.
Ensuite, nous avons déclaré un pointeur de type tableau nommé «FP» et ses éléments contiennent les noms de 4 méthodes ou processus. La méthode principale déclarée «ID» variable indique ici des processus. La boucle «pour» a été utilisée ici pour créer un processus d'enfant pour chaque processus parent en utilisant la méthode «fork ()» et enregistrer cela dans la variable «int». L'instruction «IF» a été utilisée pour vérifier si «l'identifiant» est 0. Si la condition se réunit, elle imprimera le numéro de processus de l'enfant et le tableau «FP» sera utilisé comme méthode pour récupérer le premier élément, le processus 1, etc. jusqu'à la fin de la boucle. L'appel des méthodes de cette manière le ferait exécuter toutes les méthodes définies ci-dessus.
Compilez d'abord le fichier.
$ gcc prctl.c
L'exécution du fichier affiche la sortie ci-dessous. Le nom a été défini pour chaque processus.
$ ./un.dehors
Exemple 02:
Ayons une autre illustration de PRCTL. Ouvrez le prctl.c fichier.
$ nano prctl.c
Une fois les en-têtes inclus, la méthode «CAP_1» a été initialisée. Le descripteur de fichier «F» a été défini et une variable «res» a été initialisée avec une valeur «-1». Maintenant, le descripteur de fichier sera utilisé pour obtenir la capacité maximale du noyau. Le descripteur de fichier ouvrira le fichier en lecture seule dans le dossier du noyau. Si le descripteur de fichier obtient plus de 0 caractères, le tableau «buf» sera défini avec la taille 32. Deux entiers ont été définis et la méthode de lecture a été utilisée pour obtenir les données du tampon à l'aide du descripteur de fichiers et enregistrée dans la variable «NUM». Si la valeur «num» de variable est supérieure à 0, la valeur indexée de la variable «num» sera initialisée comme nul. La méthode «SSCANF» liera le pointeur «Res» avec le tableau «BUF» et le stockera dans la variable «R». C'est ainsi que la capacité maximale pourrait être obtenue du noyau. Si la valeur de la variable «r» ne correspond pas à 1, elle mettra à jour la valeur de «res» avec «-1». En fin de compte, la description a été fermée.
La deuxième méthode, «CAP_2» a été utilisée pour initialiser la variable de capacité égale à 0. La méthode prctl () utilise «pr_capbset_read» pour lire la capacité maximale. Si la valeur de la capacité est supérieure à 0, elle sera incrémentée. Lorsque la capacité atteint 0, il arrêtera l'incrémentation et renvoie la valeur «CP» avec une diminution de 1.
La méthode principale consiste à obtenir la capacité du «CAP_1» et du CAP_2 et de l'imprimer à la condition de la condition.
La compilation et l'exécution de ce fichier montrent que la valeur de capacité maximale est de 40.
$ gcc prctl.c
$ ./un.dehors
Conclusion:
Dans ce guide, nous avons discuté de deux exemples pour développer l'appel du système PRCTL () en C. Cela vous aidera beaucoup car nous l'avons démontré avec deux arguments différents.