- Cos'e' una Pipe ???
- Quando viene Usata ???
- Come Funziona ???
- Come si Crea ???
- Cos'e' una Pipe ???
- Quando viene Usata ???
- Come Funziona ???
- Come si Crea ???
PoWered by:
Gentoo 1.5.3 - Kernel 2.6.7
Debian Sid - Kernel 2.6.7 - Bash 3.0
Slackware current - Kernel 2.6.7
- Cos'e' una Pipe ???
Reindirizza l'uotput di un programma sull'input di un altro
- Quando viene Usata ???
In linux , ad es, per cercare fai:
ls -l / | grep cd
- Come Funziona ???
Nell'esempio sopra l'output di ls viene passato a grep che si occupa di cercarci dentro
- Come si Crea ???
Dovresti guardarti sul manuale del GCC, sempre che tu programmi su linux
La stupidità umana e l'universo sono infinite.
Della seconda non sono certo(Einstein)
Gnu/Linux User
Cos'e' una Pipe ???
E' un metodo per far comunicare dei processi che girano sulla stessa macchina (reindirizzamento I/O e' un esempio di utilizzo). In pratica e' un buffer comune a piu' processi
- Quando viene Usata ???
quando (appunto) due processi sulla stessa macchina devono comunicare
- Come Funziona ???
in c e' molto simile alla gestione dei file, in pratica infatti vengono usate chiamate di sistema al filesystem per creare il buffer e per gestire la comunicazione
- Come si Crea ???
FILE *popen(char *command, char *type) - apre una pipe per I/O dove
"command" e' il processo che deve essere connesso al processo chiamante, creando cosi' la pipe. Il "type" puo' essere sia "r" per reading (lettura) che "w" per writing (scrittura).
Il return di popen() e' un puntatore ad una stream oppure NULL per un qualsiasi errore.
Una pipe aperta con popen() deve sempre essere chiusa con
pclose(FILE *stream)
E' possibile comunicare con la "stream" della pipe tramite fprintf() ed fscanf().
int pipe(int fd[2]) - crea una pipe e ritorna due file descrittori, fd[0]
e fd[1]. fd[0] e' aperto per la lettura, fd[1] per la scrittura.
pipe() ritorna 0 in caso di successo, -1 in caso di fallimento e di conseguenza setta errno.
Il modello standard di programmazione prevede che, dopo la creazione della pipe, due o piu' processi che cooperano verranno creati da una fork ed i
dati verranno passati mediante l'utilizzo di read() e write().
Le pipe aperte con pipe() dovranno essere chiuse con "close (int fd)".
Esempio: il processo padre invia delle write al processo figlio
int pdes[2];
pipe(pdes);
if (fork == 0)
{ /* processo figlio */
close(pdes[1]); /* non richiesto */
read(pdes[0]); /* legge dal processo padre */
...
}
else
{ close(pdes[0]); /* non richiesto */
write(pdes[1]); /* scrive al processo figlio */
...
}