Académique Documents
Professionnel Documents
Culture Documents
entrées sorties
Contexte
I But de ce "chapitre" :
I se familiariser avec les appels système
I se familiariser avec les descripteurs de chiers
Les appels système
de commande
int i ;
printf (" le nombre d ' argument e s t %d \ n " , a r g c ) ;
/ ∗ affiche sur la sortie standard ∗/
for ( i =0; i <a r g c ; i ++)
printf (" l ' a r g u m e n t %d e s t %s \ n " , i , a r g v [ i ] )
;
int int
main ( argc , char ∗∗ a r g v , char ∗∗ e n v )
int i ;
for ( i =0; e n v [ i ] ! = NULL ; i ++)
p r i n t f ( "%d ) %s \ n " , i , e n v [ i ] ) ;
return 0;
}
printf est une fonction de la bibliothèque standard du C
(libc/glibc), une couche entre l'OS et nos programmes.
#i n c l u d e < s y s / t y p e s . h>
#i n c l u d e < s y s / s t a t . h>
#i n c l u d e < f c n t l . h>
int open ( const char ∗ pathname , int flags )
I flags : conjonction de :
I O_RDONLY, O_WRONLY, ou O_RDWR (lecture, écriture
ou les 2)
I O_CREAT : crée le chier (s'il n'existe pas)
I O_APPEND : rajoute à la n du chier (positionne à la n du
chier)
I O_TRUNC : tronque le chier à la taille 0.
Exemple :
int fd=open("file.txt",O_WROLNY | O_CREAT | O_TRUNC, 0644);
Entrées/sorties standards
#i n c l u d e < u n i s t d . h>
ssize_t read ( int fd , void ∗ buf , size_t count ) ;
I fd : descripteur de chier
I buf : pointeur vers la zone mémoire où seront copiées les
données
#i n c l u d e < s y s / t y p e s . h>
#i n c l u d e < u n i s t d . h>
off_t lseek ( int fd , off_t offset , int whence ) ;
#i n c l u d e < u n i s t d . h>
int dup ( int oldfd ) ;
int dup2 ( int oldfd , int newfd ) ;
Exemple :
#i n c l u d e < s y s / t y p e s . h>
#i n c l u d e < d i r e n t . h>
struct dirent {
ino_t d_ino ; /∗ inode number ∗/
off_t d_off ; /∗ see man ∗/
unsigned short d_reclen ; / ∗ length ∗/
unsigned char d_type ; / ∗ type of f i l e ∗/
char d_name [ 2 5 6 ] ; /∗ f i l e n a m e ∗/
};
Informations sur un chier
int s t a t ( const c h a r ∗ pathname , struct stat ∗ buf ) ;
struct stat {
dev_t s t _ d e v ; /∗ device containing file ∗/
ino_t st_ino ; /∗ inode number ∗/
mode_t st_mode ; /∗ protection ∗/
nlink_t st_nlink ; / ∗ number of hard links ∗/
uid_t st_uid ; /∗ user ID of owner ∗/
gid_t st_gid ; / ∗ g r o u p ID of owne r ∗/
dev_t st_rdev ; /∗ device ID ( i f special file ) ∗/
off_t st_size ; /∗ total size , in bytes ∗/
blksize_t st_blksize ;
/∗ blocksize for filesystem I /O ∗/
blkcnt_t st_blocks ;
/ ∗ number o f 512B b l o c k s a l l o c a t e d ∗ /
s t r u c t t i m e s p e c s t _ a t i m ; /∗ l a s t a c c e s s ∗/
s t r u c t t i m e s p e c st_mtim ; / ∗ l a s t m o d i f i c a t i o n ∗ /
s t r u c t t i m e s p e c s t _ c t i m ; /∗ l a s t s t a t u s c h a n g e ∗/
};
Autres
Autres appels système qui peuvent servir (et ne sont pas le sujet de
prochains cours)
Dans les "vieux" ordinateurs (-286, DOS) (et dans certains modes
des ordinateurs actuels) :
Problèmes :
Avantages :
I Le mode "noyau"
I Le noyau voit (et peut gérer) toute la mémoire physique. Il
peut modier les tables des pages.
I + de privilèges (accès au matériel...)
Appel système
I les données :
I segment de donnée statique
I pile (stack)
I tas (heap)
I Attention au dépassement !
(On peut augmenter la taille de la pile avec setrlimit)
Tas (Heap)
I fragmentation
I Signaux
I IPC : Tubes
I Threads