popen(), pclose() - prepara I/O ed esegue processi
#include FILE *popen(const char *command, const char *type); int pclose(FILE *stream);
La funzione popen() apre un processo effettuando le operazioni seguenti:
- crea una 'pipe'
- esegue una fork()
- invoca la shell
L'argomento command della funzione popen() contiene la command-line della shell. Questo comando e' passato alla shell come argomento, ottenendo cosi' una chiamata al sistema operativo che nel caso di UNIX diventa:
/bin/sh -c commandNella funzione popen(), l'argomento type indica il verso della direzione della 'pipe', essendo queste monodirezionali.
Quindi type specifica se il processo corrente gestisce la 'pipe' in sola lettura (type = "r") o in sola scrittura (type = "w").La funzione popen() torna una standard I/O stream.
Scrivendo sullo stream (se aperto in scrittura) i dati vengono passati sullo standard input del comando command, mentre lo standard output del comando e' lo stesso dello standard output del processo che ha chiamato la popen() (a meno che sia stato modificato con la chiamata del comando).
Leggendo sullo stream (se aperto in input) i dati sono acquisiti dallo standard output del comando command, mentre lo standard input del comando e' lo stesso dello standard input del processo che ha chiamato la popen().L'I/O stream ritornato da popen() deve venire chiuso necessariamente da pclose() anziche' da fclose().
La funzione pclose() attende che termini il processo avviato da popen() e ritorna lo stato di uscita del comando come viene ritornato dalla funzione wait().
La funzione popen() ritorna NULL se fallisce la chiamata a fork() o a pipe() o se non possa essere allocata memoria, altrimenti torna lo standard I/O stream.La funzione pclose() ritorna -1 in caso di errori.
POSIX.2
fork() pipe() system() wait() fopen() fclose() fflush()
Indice linguaggio C |
Indice librerie C |
Umberto Zappi Home Page |
Indice funzioni C |