!
" #$
% #
&'
( #
) !
* + & , (
Généralités
+ .$./ & (
Création d’un tube ordinaire
#include <unistd.h>
int pipe (int p[2])
- 0
− p[0] 0 +
− p[1] 0 +
* 1 + 2' #
Généralités sur les tubes ordinaires
+ 3
+ + 3
+ 0 4
SIGPIPE 3
+ 2 ! 3
+ , & + (3
+ 5 #
Utilisations des tubes ordinaires
) ! % + 5
0
'# & ( + (pipe) 3
-# $ (fork) 67 ! !
3
8# ) , + % (write) 3
9# ) + % (read) 3
:# * + % (close) 0
close(p[0]) + 3
close(p[1]) + #
-
) !
* + & , (
Exemple d’utilisation des tubes ordinaires
#include <stdio.h>
#include <unistd.h>
#define MAX 10
main()
int p[2];
char data[MAX];
if (pipe(p)==-1)
perror( pipe );
exit(1);
if (fork()>0) /* père */
close(p[0]);
nb_lu=read(0,data,Max);
write(p[1],data,nb_lu);
close(p[1]);
wait();
else /* fils */
close(p[1]);
nb_lu=read(p[0],data,Max);
write(1,data,nb_lu);
close(p[0]);
exit(0);
8
) !
* + & , (
Duplications de descripteurs de fichiers
#include <unistd.h>
int dup2(int newfd, int oldfd)
oldfd & ( newfd# * %
! +
! #
Exercices
% 0
ps -aux | wc -l
% 0
ps -aux | grep root | wc -l