Linux Popen System Call in C

Linux Popen System Call in C

"La funzione Popen () eseguirà il comando fornito dal comando della stringa. La funzione dovrebbe restituire un puntatore a un flusso che viene utilizzato per leggere o scrivere sul tubo mentre creando anche un tubo tra l'applicazione chiamante e il comando eseguito. La funzione Popen è disponibile nella libreria standard della funzione I/O e genera un secondo processo per eseguire un comando terminale. La fase aperta di Popen () è la stessa della fase aperta nella funzione fopen (). La funzione Popen () avvia un processo biformando, costruendo un tubo ed eseguendo la shell. Poiché un tubo è unidirezionale per impostazione predefinita; Di conseguenza, il flusso è di sola lettura o di solo scrittura. Nella funzione Popen () Esecuzione riuscita, si ottiene un flusso aperto che viene utilizzato per la lettura e la scrittura del tubo."

Esempio 1

Con il seguente programma di esempio, leggeremo i file esistenti nella directory o nella cartella corrente utilizzando la chiamata di sistema Popen. Innanzitutto, abbiamo inserito lo stdio.H File di intestazione della libreria standard C. Quindi, abbiamo una funzione programma int main () in cui abbiamo distribuito la funzione Popen. Prima di questo, abbiamo stabilito la variabile puntatore "fileopen" dal "file" di classe ". La variabile puntatore del file indica il byte successivo da leggere o scrivere.

Successivamente, abbiamo assegnato il valore limite del personaggio da leggere. La variabile "fileopen" ha quindi invocato la funzione "popen". La funzione "Popen" prende il comando "LS -l" di Linux, che elencherà tutti i file della directory corrente. Inoltre, abbiamo inserito il parametro "R" nella funzione Popen, che indica la modalità di lettura.

Qui, abbiamo convocato il processo di lettura dei file utilizzando la funzione Popen. Successivamente, abbiamo elaborato il tubo creato con il loop while. Il ciclo while utilizza i metodi FGETS, che prendono gli argomenti "linea", "size della linea" e "fileopen". I fgets leggono il processo con le tubazioni e lo memorizzavano nel simbolo "%s" della stringa. Questo particolare simbolo è chiamato all'interno del metodo printf insieme all'argomento "linea". Una volta che abbiamo creato il tubo elaborato, con la funzione PCLOSED, il processo a tubo può essere chiuso come distribuito alla fine del programma seguente.

#includere
int main ()

File *fileopen;
CHAR LINE [130];
Fileopen = popen ("ls -l", "r");
while (fGets (riga, dimensione della riga, fileopen))

printf ("%s", linea);

pclose (fileopen);

La funzione Popen del programma C ha sradicato il processo sopra e quindi ha creato il tubo. Ora abbiamo eseguito il tubo elaborato del flusso nella shell con il comando di compilazione C. L'output ha elencato tutti i file nella directory "home" mentre abbiamo eseguito il programma in quella directory.

Esempio 2

Nel precedente programma POPEN, abbiamo una semplice dimostrazione della funzionalità del programma POPEN utilizzato per la tubazione del processo di streaming dei file di lettura. Ora, abbiamo preso un altro esempio della funzione Popen in cui abbiamo convocato il processo con la modalità di scrittura. Consideriamo il programma con la funzione principale. Abbiamo costruito la variabile puntatore del file all'interno della funzione principale come "file". Il puntatore del file viene distribuito con la funzione Popen.

La funzione Popen prende il comando "Cat" e la "W" per la modalità di scrittura. Qui, ogni argomento del file viene letto in sequenza e inviato all'output standard dal comando CAT. Nel corpo per loop, abbiamo utilizzato la funzione fprintf per stampare i valori di conteggio numerico poiché abbiamo specificato il simbolo "%d". Quindi chiuso, il processo del tubo di Popen con la chiamata di sistema Pclose.

#includere
int main (int argc, char ** argv)
File *file = popen ("cat", "w");
int x = 0;
per (x = 0; x<5;x++)
fprintf (file, "my count = %d \ n", x);

pclose (file);
restituzione 0;

Quando abbiamo eseguito il processo sopra creato, ha stampato i valori di conteggio nel modo seguente.

Esempio 3

Ora abbiamo un altro programma che trasferisce i dati di un processo a un altro processo. Lo faremo con il tubo dalla funzione Popen. Abbiamo implementato il programma utilizzando le librerie standard di C. Quindi, abbiamo una funzione principale INT per la distribuzione di un programma. Qui, abbiamo specificato la stringa nella funzione Sprintf con l'argomento "buffer". La funzione sprintf () mantiene il risultato sul buffer char fornito da sprintf anziché inviarlo al prompt.

Successivamente, abbiamo chiamato la funzione Popen all'interno della variabile "Leggi". Lì, abbiamo due processi all'interno della funzione Popen. Il "wc -c" è il primo processo che viene utilizzato per contare i caratteri forniti e il secondo processo è la "W", il che indica che il tubo è aperto nella modalità di scrittura. Successivamente, abbiamo la funzione "FWRITE" che utilizza il tubo per scrivere i dati. I dati saranno ricevuti dal "WC", quindi contano il carattere e visualizzati nella shell.

#includere
#includere
#includere
#includere
int main ()

File *leggi;
Char Buffer [50];
Sprintf (buffer, "Linux System Call");
leggi = popen ("wc -c", "w");
fwrite (buffer, sizeof (char), strlen (buffer), lettura);
pclose (leggi);

I caratteri visualizzati nel prompt sono "17" perché la stringa che abbiamo specificato sopra contiene caratteri "17". Il processo "WC -c" legge questi caratteri e li stampa come output.

Esempio 4

L'esempio sopra di Popen invia i dati da un processo a un altro. Qui riceveremo i dati da un processo all'altro processo tramite un tubo. La funzione principale del programma è costruire il buffer, che prende i valori "50". Quindi, abbiamo creato la variabile "R", in cui la funzione Popen ha creato il processo. Il processo "LS" viene utilizzato per elencare i file della directory e il processo "R" per la lettura dei dati dal tubo. Il processo "LS" trasmette i dati nel processo "R" da leggere. Dopo questo, abbiamo la funzione Fread, che legge i dati e memorizza i dati nel buffer. Quindi, l'istruzione di stampa stamperà i dati archiviati nel buffer.

#includere
#includere
#includere
#includere
int main ()

File *r;
Char Buffer [50];
r = popen ("ls", "r");
Fread (buffer, 1, 25, r);
printf ("%s \ n", buffer);
pclose (r);

Qui vengono visualizzati solo i caratteri "50" dei file esistenti. Pertanto, l'output avrà solo 50 caratteri.

Conclusione

Abbiamo fornito una dimostrazione dettagliata delle chiamate del sistema Popen Linux in lingua C. Abbiamo implementato quattro esempi in cui abbiamo distribuito la funzione Popen. La funzione Popen restituisce il flusso del tubo in base alla modalità che abbiamo assegnato. Negli esempi, abbiamo utilizzato sia la modalità di lettura che di scrittura con le funzioni di gestione dei file Fread e FWRITE. Abbiamo usato il nome del programma nella funzione Popen () come primo argomento. Il secondo argomento è un file "r" come letto o "w" come modalità di scrittura.