Appel du système Linux Popen dans C

Appel du système Linux Popen dans C

"La fonction POPEN () réalisera la commande donnée par la commande de la chaîne. La fonction doit renvoyer un pointeur vers un flux qui est utilisé pour lire ou écrire sur le tuyau tout en créant un tuyau entre l'application d'appel et la commande exécutée. La fonction POPEN est disponible dans la bibliothèque standard de la fonction d'E / S et engendre un deuxième processus pour exécuter une commande de terminal. La phase ouverte du POPEN () est la même que la phase ouverte de la fonction fopen (). La fonction POPEN () initie un processus en fournissant, en construisant un tuyau et en exécutant la coquille. Puisqu'un tuyau est unidirectionnel par défaut; En conséquence, le flux est en lecture seule ou en écriture uniquement. Sur la fonction POPEN (), une exécution réussie, un flux ouvert est obtenu qui est utilisé pour que le tuyau puisse lire et écrire."

Exemple 1

Avec le programme d'exemple suivant, nous lirons les fichiers qui existent dans le répertoire ou le dossier actuel à l'aide de l'appel du système POPEN. Premièrement, nous avons entré le stdio.Fichier d'en-tête H de la bibliothèque standard C. Ensuite, nous avons un programme int Main () où nous avons déployé la fonction POPEN. Avant cela, nous avons établi la variable du pointeur «FileOpen» de la classe «fichier». La variable du pointeur du fichier indique que l'octet suivant à lire ou à écrire.

Après cela, nous avons attribué la valeur limite du personnage à lire. La variable «FileOpen» a ensuite invoqué la fonction «POPEN». La fonction «POPEN» prend la commande «ls -l» de Linux, qui répertorie tous les fichiers du répertoire actuel. De plus, nous avons entré le paramètre «R» dans la fonction POPEN, qui indique le mode de lecture.

Ici, nous avons canalisé le processus de lecture des fichiers en utilisant la fonction POPEN. Ensuite, nous avons traité le tuyau créé avec la boucle while. La boucle while utilise les méthodes FGETS, qui prend les arguments «ligne», «taille de la ligne» et «Fileopen». Les fgets ont lu le processus tuyauté et l'ont stocké dans le symbole «% s» de la chaîne. Ce symbole particulier est appelé à l'intérieur de la méthode printf avec l'argument «ligne». Une fois que nous avons créé le tuyau traité, avec la fonction plosée, le processus tuyaux peut être fermé comme déployé à la fin du programme ci-dessous.

#inclure
int main()

Fichier * fileOpen;
Char Line [130];
FileOpen = POPEN ("ls -l", "r");
while (fgets (ligne, taille de ligne, fileopen)))

printf ("% s", ligne);

pclose (fileOpen);

La fonction POPEN du programme C a déboursé le processus ci-dessus, puis a créé le tuyau. Maintenant, nous avons exécuté le tuyau traité du flux dans la coque avec la commande de compilation C. La sortie a répertorié tous les fichiers du répertoire «à domicile» car nous avons exécuté le programme dans ce répertoire.

Exemple 2

Dans le programme POPEN précédent, nous avons une démonstration simple de la fonctionnalité du programme POPEN qui est utilisée pour la tuyauterie du processus de streaming de lecture de fichiers. Maintenant, nous avons pris un autre exemple de la fonction POPEN où nous avons canalisé le processus avec le mode d'écriture. Considérons le programme avec la fonction principale. Nous avons construit la variable du pointeur de fichiers à l'intérieur de la fonction principale comme «fichier». Le pointeur de fichier est déployé avec la fonction POPEN.

La fonction POPEN prend la commande «Cat» et le «W» pour le mode d'écriture. Ici, chaque argument de fichier est lu séquentiellement et envoyé à la sortie standard par la commande CAT. Dans le corps de la boucle FOR, nous avons utilisé la fonction fprintf pour imprimer les valeurs de comptage numérique car nous avons spécifié le symbole «% d». Puis fermé, le processus de tuyau de POPEN avec l'appel du système PCLOSE.

#inclure
int main (int argc, char ** argv)
Fichier * file = POPEN ("Cat", "W");
int x = 0;
pour (x = 0; x<5;x++)
fprintf (fichier, "My count =% d \ n", x);

pclose (fichier);
retour 0;

Lorsque nous avons exécuté le processus créé ci-dessus, il a imprimé les valeurs de comptage de la manière suivante.

Exemple 3

Maintenant, nous avons un autre programme qui transfère les données d'un processus à un autre processus. Nous le ferons avec le tuyau de la fonction POPEN. Nous avons mis en œuvre le programme en utilisant les bibliothèques standard de C. Ensuite, nous avons une fonction INT principale pour déployer un programme. Ici, nous avons spécifié la chaîne dans la fonction sprintf avec l'argument «tampon». La fonction sprintf () maintient le résultat sur le tampon char fourni par sprintf plutôt que de l'envoyer à l'invite.

Après cela, nous avons appelé la fonction POPEN à l'intérieur de la variable «Read». Là, nous avons deux processus à l'intérieur de la fonction POPEN. Le «WC -C» est le premier processus qui est utilisé pour compter les caractères fournis, et le deuxième processus est le «W», ce qui indique que le tuyau est ouvert en mode d'écriture. Après cela, nous avons la fonction «FWrite» qui utilise le tuyau pour écrire des données. Les données seront reçues par le «WC», puis compté le caractère et affiché dans le shell.

#inclure
#inclure
#inclure
#inclure
int main()

Fichier * lecture;
tampon char [50];
sprintf (tampon, "Linux System Call");
read = POPEN ("WC -C", "W");
fwrite (tampon, sizeof (char), strlen (tampon), lecture);
pclose (lire);

Les caractères affichés dans l'invite sont «17» car la chaîne que nous avons spécifiée ci-dessus contient des caractères «17». Le processus «WC -C» lit ces caractères et les imprime comme une sortie.

Exemple 4

L'exemple ci-dessus de POPEN envoie les données d'un processus à un autre. Ici, nous recevrons les données d'un processus à l'autre processus via un tuyau. La fonction principale du programme est de construire le tampon, qui prend des valeurs «50». Ensuite, nous avons créé la variable «R», où la fonction POPEN a créé le processus. Le processus «LS» est utilisé pour répertorier les fichiers du répertoire et le processus «R» pour lire les données du tuyau. Le processus «LS» transmet les données du processus «R» à lire. Après cela, nous avons la fonction Fread, qui lit les données et stocke les données dans le tampon. Ensuite, la déclaration d'impression imprimera les données stockées dans le tampon.

#inclure
#inclure
#inclure
#inclure
int main()

Fichier * r;
tampon char [50];
r = POPEN ("ls", "r");
Fière (tampon, 1, 25, R);
printf ("% s \ n", tampon);
PCLOSE (R);

Ici, seuls «50» caractères des fichiers existants sont affichés à partir du répertoire de travail. Par conséquent, la sortie n'aura que 50 caractères.

Conclusion

Nous avons donné une démonstration détaillée des appels du système Linux Popen dans le langage C. Nous avons mis en œuvre quatre exemples où nous avons déployé la fonction POPEN. La fonction POPEN renvoie le flux de tuyaux en fonction du mode que nous avons attribué. Dans les exemples, nous avons utilisé à la fois le mode de lecture et d'écriture avec les fonctions de traitement de fichiers Fread et FWrite. Nous avons utilisé le nom du programme dans la fonction POPEN () comme son premier argument. Le deuxième argument est un fichier «r» comme lecture ou «w» comme mode d'écriture.