0% ont trouvé ce document utile (0 vote)
30 vues42 pages

SP Sequence 2

Le document présente les concepts fondamentaux de la gestion de la mémoire, des processus, des threads, de la communication inter-processus, de la synchronisation et de la sécurité système. Il décrit également plusieurs appels système, tels que open(), read(), write(), close(), socket() et pipe(), avec leur syntaxe et leur comportement. Chaque appel système est accompagné d'exemples illustrant son utilisation.

Transféré par

Mahamat Khalil yakhoub
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
30 vues42 pages

SP Sequence 2

Le document présente les concepts fondamentaux de la gestion de la mémoire, des processus, des threads, de la communication inter-processus, de la synchronisation et de la sécurité système. Il décrit également plusieurs appels système, tels que open(), read(), write(), close(), socket() et pipe(), avec leur syntaxe et leur comportement. Chaque appel système est accompagné d'exemples illustrant son utilisation.

Transféré par

Mahamat Khalil yakhoub
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

Concepts de base Concepts fondamentaux Gestion de la mémoire Processus / Threads Communication Inter-processus Synchronisation Sécurité système

C 
Concepts de base Concepts fondamentaux Gestion de la mémoire Processus / Threads Communication Inter-processus Synchronisation Sécurité système

B 
’A 

  i f n d e f BIBLIO_HDR_H
  d e f i n e BIBLIO_HDR_H /* Prevent a c c i d e n t a l mutiple i n c l u s i o n */

  i n c l u d e  sys / types . h /* Type d e f i n i t i o n s */

  i n c l u d e  s t d i o . h /* Standard I /O f u n c t i o n s */

  i n c l u d e  s t d l i b . h /* EXIT_SUCCESS / EXIT_FAILURE constants */

  i n c l u d e  u n i s t d . h /* Prototypes f o r many system c a l l s */

  i n c l u d e  errno . h /* D e cl a r e s errno / d e f i n e s e r r o r constant */

  i n c l u d e  s t r i n g . h /* Commonly used s t r i n g −handling f u n c t . */

  endif

 
Concepts de base Concepts fondamentaux Gestion de la mémoire Processus / Threads Communication Inter-processus Synchronisation Sécurité système

A 
D 

Appel système: open()


• Syntaxe:

  i n c l u d e  sys / s t a t . h
  i n c l u d e  f c n t l . h
 i n t open ( const char * pathname , i n t f l a g s , . . . /* mode_t mode
*/ ) ;

• Retourne le descripteur de chier en cas de succès, ou - sinon


• Diérents modes d’accès:

Mode d’accès Description


O_RDONLY Ouvrir le chier en lecture seule
O_WRONLY Ouvrir le hcier en écriture seule
O_RDWR Ouvrir le chier en lecture et écriture

 
Concepts de base Concepts fondamentaux Gestion de la mémoire Processus / Threads Communication Inter-processus Synchronisation Sécurité système

A 
D 

Appel système: read()


• Syntaxe:
  i n c l u d e  u n i s t d . h
 s s i z e _ t read ( i n t fd , void * b u f f e r , s i z e _ t count ) ;

• Retourne le nombre d’octets lus,  au cas où EOF ou - sinon

 
Concepts de base Concepts fondamentaux Gestion de la mémoire Processus / Threads Communication Inter-processus Synchronisation Sécurité système

A 
D 

Appel système: read()


• Syntaxe:
  i n c l u d e  u n i s t d . h
 s s i z e _ t read ( i n t fd , void * b u f f e r , s i z e _ t count ) ;

• Retourne le nombre d’octets lus,  au cas où EOF ou - sinon


• Exemple:
 // . . .
 char b u f f e r [ MAX_READ   ] ;
 s s i z e _ t numRead ;
 numRead  read ( STDIN_FILENO , b u f f e r , MAX_READ ) ;
 i f ( numRead  −)
 e r r E x i t ( " read " ) ;
 b u f f e r [ numRead ]  ’ \ ’ ;
 p r i n t f ( " The i n p u t data was : s \n " , b u f f e r ) ;
 // . . .

 
Concepts de base Concepts fondamentaux Gestion de la mémoire Processus / Threads Communication Inter-processus Synchronisation Sécurité système

A 
D 

Appel système: write()


• Syntaxe:
  i n c l u d e  u n i s t d . h
 s s i z e _ t w r i t e ( i n t fd , void * b u f f e r , s i z e _ t count ) ;

• Retourne le nombre d’octets écrits, ou - en cas d’erreur

 
Concepts de base Concepts fondamentaux Gestion de la mémoire Processus / Threads Communication Inter-processus Synchronisation Sécurité système

A 
D 

Appel système: write()


• Syntaxe:
  i n c l u d e  u n i s t d . h
 s s i z e _ t w r i t e ( i n t fd , void * b u f f e r , s i z e _ t count ) ;

• Retourne le nombre d’octets écrits, ou - en cas d’erreur

• Exemple:
 // . . .
 case ’w ’ : /* W r i t e s t r i n g at c u r r e n t o f f s e t */
 nWritten  w r i t e ( fd , &argv [ ap ] [  ] , s t r l e n (& argv [ ap ] [  ] ) ) ;
 i f ( nWritten  −)
 errE xit ( " write " ) ;
 p r i n t f ( "s : wrote l d bytes \n " , argv [ ap ] , ( long ) nWritten ) ;
 break ;
 // . . .

 
Concepts de base Concepts fondamentaux Gestion de la mémoire Processus / Threads Communication Inter-processus Synchronisation Sécurité système

A 
D 

Appel système: close()


• Syntaxe:

  i n c l u d e  u n i s t d . h
 i n t c l o s e ( i n t fd ) ;

• Retourne  en cas de succès, ou - en cas d’erreur

 
Concepts de base Concepts fondamentaux Gestion de la mémoire Processus / Threads Communication Inter-processus Synchronisation Sécurité système

A 
D 

Appel système: close()


• Syntaxe:

  i n c l u d e  u n i s t d . h
 i n t c l o s e ( i n t fd ) ;

• Retourne  en cas de succès, ou - en cas d’erreur

• Exemple:

 // . . .
 i f ( c l o s e ( fd )  −)
 e r r E x i t ( " close " ) ;
 // . . .

 
Concepts de base Concepts fondamentaux Gestion de la mémoire Processus / Threads Communication Inter-processus Synchronisation Sécurité système

A 
D 

Appel système: socket()


• Syntaxe:

  i n c l u d e  sys / socket . h
 i n t socket ( i n t domain , i n t type , i n t p r o t o c o l ) ;

• Retourne le descripteur de chier en cas de succès, ou - en cas d’erreur

 
Concepts de base Concepts fondamentaux Gestion de la mémoire Processus / Threads Communication Inter-processus Synchronisation Sécurité système

A 
D 

Appel système: socket()


• Syntaxe:

  i n c l u d e  sys / socket . h
 i n t socket ( i n t domain , i n t type , i n t p r o t o c o l ) ;

• Retourne le descripteur de chier en cas de succès, ou - en cas d’erreur

• Exemple:

 // . . .
 s f d  socket ( AF_UNIX , SOCK_STREAM , ) ;
 i f ( s f d  −)
 e r r E x i t ( " socket " ) ;
 // . . .

 
Concepts de base Concepts fondamentaux Gestion de la mémoire Processus / Threads Communication Inter-processus Synchronisation Sécurité système

A 
D 

Appel système: pipe()


• Syntaxe:
  i n c l u d e  u n i s t d . h
 i n t pipe ( i n t f i l e d e s [  ] ) ;

• Retourne  en cas de succès, ou - en cas d’erreur

 
Concepts de base Concepts fondamentaux Gestion de la mémoire Processus / Threads Communication Inter-processus Synchronisation Sécurité système

A 
D 

Appel système: pipe()


• Syntaxe:
  i n c l u d e  u n i s t d . h
 i n t pipe ( i n t f i l e d e s [  ] ) ;

• Retourne  en cas de succès, ou - en cas d’erreur

• Exemple:

 // . . .
 int filedes [  ] ;
 i f ( pipe ( f i l e d e s )  −)
 e r r E x i t ( " pipe " ) ;
 // . . .

 
Concepts de base Concepts fondamentaux Gestion de la mémoire Processus / Threads Communication Inter-processus Synchronisation Sécurité système

A 
D 

Appel système: fork()


• Syntaxe:
  i n c l u d e  u n i s t d . h
 p i d _ t f o r k ( void ) ;

• Retourne process ID du ls en cas de succès, ou - en cas d’erreur

 
Concepts de base Concepts fondamentaux Gestion de la mémoire Processus / Threads Communication Inter-processus Synchronisation Sécurité système

A 
D 

Appel système: fork()


• Syntaxe:
  i n c l u d e  u n i s t d . h
 p i d _ t f o r k ( void ) ;

• Retourne process ID du ls en cas de succès, ou - en cas d’erreur


• Exemple:
 // . . .
 pid_t childPid ;
 switch ( childPid  fork ( ) ) {
 case −:
 /* Handle e r r o r */
 case  : /* C h i l d of s u c c e s s f u l f o r k ( ) comes here */
 /* Perform a c t i o n s s p e c i f i c to c h i l d */
 d e f a u l t : /* Parent comes here a f t e r s u c c e s s f u l f o r k ( ) */
 /* Perform a c t i o n s s p e c i f i c to parent */
 }
 // . . .
 
Concepts de base Concepts fondamentaux Gestion de la mémoire Processus / Threads Communication Inter-processus Synchronisation Sécurité système

A 
D 

Appel système: pthread_create()


• Syntaxe:
  i n c l u d e  pthread . h
 i n t pthread_create ( pthread_t * thread , const p t h r e a d _ a t t r _ t *
a t t r , void * ( * s t a r t ) ( void * ) , void * arg ) ;

• Retourne  en cas de succès, ou n   en cas d’erreur

 
Concepts de base Concepts fondamentaux Gestion de la mémoire Processus / Threads Communication Inter-processus Synchronisation Sécurité système

A 
D 

Appel système: pthread_create()


• Syntaxe:
  i n c l u d e  pthread . h
 i n t pthread_create ( pthread_t * thread , const p t h r e a d _ a t t r _ t *
a t t r , void * ( * s t a r t ) ( void * ) , void * arg ) ;

• Retourne  en cas de succès, ou n   en cas d’erreur

• Exemple:
 // . . .
 s  pthread_create (& t  , NULL , threadFunc , " H e l lo world \n " ) ;
 i f ( s !  )
 e r r E x i t E N ( s , " pthread_create " ) ;
 // . . .

 
Concepts de base Concepts fondamentaux Gestion de la mémoire Processus / Threads Communication Inter-processus Synchronisation Sécurité système

A 
D 

Appel système: ioctl()


• Syntaxe:
  i n c l u d e  sys / i o c t l . h
 i n t i o c t l ( i n t fd , i n t request , . . . /* argp */ ) ;

• Retourne une valeur, ou - en cas d’erreur

 
Concepts de base Concepts fondamentaux Gestion de la mémoire Processus / Threads Communication Inter-processus Synchronisation Sécurité système

A 
D 

Appel système: ioctl()


• Syntaxe:
  i n c l u d e  sys / i o c t l . h
 i n t i o c t l ( i n t fd , i n t request , . . . /* argp */ ) ;

• Retourne une valeur, ou - en cas d’erreur

• Exemple:
 // . . .
 int attr ;
 i f ( i o c t l ( fd , FS_IOC_GETFLAGS , &a t t r )  −) /* Fetch
c u r r e n t f l a g s */
 errExit ( " ioctl " ) ;
 a t t r | FS_NOATIME_FL ;
 i f ( i o c t l ( fd , FS_IOC_SETFLAGS , &a t t r )  −) /* Update f l a g s
*/
 errExit ( " ioctl " ) ;
 // . . .

 
Concepts de base Concepts fondamentaux Gestion de la mémoire Processus / Threads Communication Inter-processus Synchronisation Sécurité système

A 
G  

Exemples
• Exemple :
 // . . .
 fd  open ( pathname , f l a g s , mode ) ;
 i f ( fd  −) {
 /* Code to handle the e r r o r */
 }
 // . . .

 
Concepts de base Concepts fondamentaux Gestion de la mémoire Processus / Threads Communication Inter-processus Synchronisation Sécurité système

A 
G  

Exemples
• Exemple :
 // . . .
 fd  open ( pathname , f l a g s , mode ) ;
 i f ( fd  −) {
 /* Code to handle the e r r o r */
 }
 // . . .

• Exemple :
 // . . .
 i f ( c l o s e ( fd )  −) {
 /* Code to handle the e r r o r */
 }
 // . . .

 
Concepts de base Concepts fondamentaux Gestion de la mémoire Processus / Threads Communication Inter-processus Synchronisation Sécurité système

A 
G  

Exemples
• Exemple :
 // . . .
 cnt  read ( fd , buf , numbytes ) ;
 i f ( cnt  −) {
 i f ( errno  EINTR )
 f p r i n t f ( s t d e r r , " read was i n t e r r u p t e d by a s i g n a l \n " ) ;
 else {
 /* Some other e r r o r occurred */
 }
 }
 // . . .

 
Concepts de base Concepts fondamentaux Gestion de la mémoire Processus / Threads Communication Inter-processus Synchronisation Sécurité système

A 
D 

Appel système: perror()


• Syntaxe:
  i n c l u d e  s t d i o . h
 void p e r r o r ( const char *msg ) ;

 
Concepts de base Concepts fondamentaux Gestion de la mémoire Processus / Threads Communication Inter-processus Synchronisation Sécurité système

A 
D 

Appel système: perror()


• Syntaxe:
  i n c l u d e  s t d i o . h
 void p e r r o r ( const char *msg ) ;

• Exemple:
 // . . .
 fd  open ( pathname , f l a g s , mode ) ;
 i f ( fd  −) {
 p e r r o r ( " open " ) ;
 e x i t ( EXIT_FAILURE ) ;
 }
 // . . .

 
Concepts de base Concepts fondamentaux Gestion de la mémoire Processus / Threads Communication Inter-processus Synchronisation Sécurité système

S • 

Dénition
Les signaux sont des interruptions logicielles qui fournissent un
mécanisme de traitement des évenements asynchrones. Ils se
dénissent également comme une notication envoyée à un
processus l’informant qu’un évènement s’est produit.

Appels système
signal() et sigaction() servent, à la réception d’un signal
spécique, à apporter des modications sur des actions
eecuées par un processus.

 
Concepts de base Concepts fondamentaux Gestion de la mémoire Processus / Threads Communication Inter-processus Synchronisation Sécurité système

S • API

signal()
  i n c l u d e  s i g n a l . h

 typedef void ( * s i g h a n d l e r _ t ) ( i n t ) ;
 s i g h a n d l e r _ t s i g n a l ( i n t signum , s i g h a n d l e r _ t handler ) ;

 
Concepts de base Concepts fondamentaux Gestion de la mémoire Processus / Threads Communication Inter-processus Synchronisation Sécurité système

S • API

signal()
  i n c l u d e  s i g n a l . h

 typedef void ( * s i g h a n d l e r _ t ) ( i n t ) ;
 s i g h a n d l e r _ t s i g n a l ( i n t signum , s i g h a n d l e r _ t handler ) ;

Exercice pratique

 ps -a
 kill SIGSTOP PID
 kill SIGCONT PID
 kill SIGKILL PID

 
Concepts de base Concepts fondamentaux Gestion de la mémoire Processus / Threads Communication Inter-processus Synchronisation Sécurité système

S • T

Action d’un processus sur réception d’un signal


• Ignorer le signal
• Exécuter une action par défaut (routine de service):
invoquer une routine de traitement fournie par le noyau
• Invoquer une routine spécique dénie par le
programmeur

 
Concepts de base Concepts fondamentaux Gestion de la mémoire Processus / Threads Communication Inter-processus Synchronisation Sécurité système

S • T

Action d’un processus sur réception d’un signal


• Ignorer le signal
• Exécuter une action par défaut (routine de service):
invoquer une routine de traitement fournie par le noyau
• Invoquer une routine spécique dénie par le
programmeur
les actions par défaut se déclinent comme suit:
A: terminer le processus
B: ignorer le processus
C: générer un chier core
D: intérrompre le processus
E: empêcher la modication de routine de service
F: obliger le processus à ne pas ignorer le signal

 
Concepts de base Concepts fondamentaux Gestion de la mémoire Processus / Threads Communication Inter-processus Synchronisation Sécurité système

S • T

Quelques signaux usuels

Signal Num. Action Description


SIGKILL  AEF Termine l’exécution du processus
SIGINT  D Interrompt le processus (Ctrl-C)
SIGSTOP  DEF Suspend le processus (Ctrl-Z)
SIGCONT  Poursuite de l’exécution du processus
SIGQUIT  DC Interruption forte du processus (Ctrl-\ )
SIGCHLD B Processus ls terminé ou stoppé
SIGUSR  A Signal indiquant user-dened cond.
SIGUSR  A Signal indiquant user-dened cond.

 
Concepts de base Concepts fondamentaux Gestion de la mémoire Processus / Threads Communication Inter-processus Synchronisation Sécurité système

S • API

sigaction()
  i n c l u d e  s i g n a l . h

 i n t s i g a c t i o n ( i n t signum , const s t r u c t s i g a c t i o n * newact ,
st ruct sigaction * oldact ) ;

 
Concepts de base Concepts fondamentaux Gestion de la mémoire Processus / Threads Communication Inter-processus Synchronisation Sécurité système

S • API

sigaction()
  i n c l u d e  s i g n a l . h

 i n t s i g a c t i o n ( i n t signum , const s t r u c t s i g a c t i o n * newact ,
st ruct sigaction * oldact ) ;

struct sigaction
 struct sigaction {
 void ( * sa_handler ) ( i n t ) ;
 sigset_t sa_mask ;
 int sa_flags ;
 };

 
Concepts de base Concepts fondamentaux Gestion de la mémoire Processus / Threads Communication Inter-processus Synchronisation Sécurité système

S • API

Description de champs
• signum : numéro du signal

• newact:
◦ sa_handler () : SIG_IGN, SIG_DFL et handler()

◦ sa_mask : ensemble de signaux à bloquer lors de l’exécution


de handler()

◦ sa_ags : (optionnel) ex. SA_RESTART redémarre


automatiquement les appels système interrompus.

• oldact: Contient les informations sur l’ancien handler()

 
Concepts de base Concepts fondamentaux Gestion de la mémoire Processus / Threads Communication Inter-processus Synchronisation Sécurité système

S • API

sa_ags

Flag Signication
SA_NODEFER Rétablir l’action à son comportement par défaut
une fois que le gestionnaire a été appelé
SA_RESTART Redémarrer les appels système interrompus à
l’arrivée du signal
SA_NOCLDSTOP Si signum vaut SIGCHLD, ne pas recevoir les
signaux de notication d’arrêt d’un processus ls
SA_NOCLDWAIT Si signum vaut SIGCHLD, ne pas transformer
les ls en zombies lorqu’ils se terminent
SA_RESETHAND Ne pas empêcher un signal d’être reçu depuis
l’intérieur de son propre gestionnaire

 
Concepts de base Concepts fondamentaux Gestion de la mémoire Processus / Threads Communication Inter-processus Synchronisation Sécurité système

S • API

Ensemble de signaux
sigset_t s est un tableau de booléens représentant un ensemble
de signaux.

• sigaddset(&s, SIGNUM): ajouter le signal spécié par SIGNUM

• sigdelset(&s, SIGNUM): supprimer le signal spécié par SIGNUM

• sigllset(&s, SIGNUM): remplir toutes les cases

• sigismember(&s, SIGNUM): vérier si le signal désigné par SIGNUM est


membre de l’ensemble de signaux s

 
Concepts de base Concepts fondamentaux Gestion de la mémoire Processus / Threads Communication Inter-processus Synchronisation Sécurité système

S • API
Masque de signaux

 
Concepts de base Concepts fondamentaux Gestion de la mémoire Processus / Threads Communication Inter-processus Synchronisation Sécurité système

S • 
Interruption & traitement de signaux

 
Concepts de base Concepts fondamentaux Gestion de la mémoire Processus / Threads Communication Inter-processus Synchronisation Sécurité système

S • 

 // . . .
 void s i g n a l _ h a n d l e r ( i n t signum )
 {
 p r i n t f ( " Caught s i g n a l d\n " , signum ) ;
 e x i t ( signum ) ;
 }

 i n t main ( i n t argc , char * argv [ ] )
 {
 i f ( s i g n a l ( SIGINT , s i g n a l _ h a n d l e r )  SIG_ERR )
 f p r i n t f ( s t d e r r , " \ncan ’ t catch SIGINT \n " ) ;

 for ( int i ; ; i )
 {
 p r i n t f ( "d\ t : \ td\n " , i  , i ) ;
 sleep (  ) ;
 }

 return ;
 }

 
Concepts de base Concepts fondamentaux Gestion de la mémoire Processus / Threads Communication Inter-processus Synchronisation Sécurité système

S • API

Blocage de signaux • sigprocmask()


sigprocmask() permet d’examiner et de changer les signaux
bloqués. L’appel système est utilisé pour changer le masque de
signal, i.e l’ensemble de signaux courants bloqués.

syntaxe

  i n c l u d e  s i g n a l . h

 i n t sigprocmask ( i n t how , const s i g s e t _ t * set , s i g s e t _ t * o l d s e t ) ;

 
Concepts de base Concepts fondamentaux Gestion de la mémoire Processus / Threads Communication Inter-processus Synchronisation Sécurité système

S • API

Valeurs possibles du paramètre de how

Flag Signication
SIG_BLOCK L’ensemble de signaux bloqués est l’union de
l’ensemble courant et de l’argument set
SIG_UNBLOCK Les signaux dans set sont supprimés
de l’ensemble courant de signaux bloqués
SIG_SETMASK L’ensemble de signaux bloqués set est
assigné au masque

 
Concepts de base Concepts fondamentaux Gestion de la mémoire Processus / Threads Communication Inter-processus Synchronisation Sécurité système

S • API

Blocage de signaux: fragment de code

 s i g s e t _ t set ;

 sigemptyset (& s e t ) ;
 s i g a d d s e t (& set , SIGHUP ) ;

 sigprocmask ( SIG_BLOCK , &set , NULL ) ;

 // c e t t e p a r t i e du code ne peut e t r e interrompue par SIGHUP

 sigprocmask ( SIG_UNBLOCK , &set , NULL ) ;

 
Concepts de base Concepts fondamentaux Gestion de la mémoire Processus / Threads Communication Inter-processus Synchronisation Sécurité système

S • API
Exemple d’utilisation de sigaction

 void s i g _ h a n d l e r ( i n t signum )  ...


 {  p r i n t f ( " I n s t a l l i n g s i g n a l handler
 p r i n t f ( " Received : s i g n a l d\n " , signum f o r s i g n a l d\n " , signum ) ;
); 
 }  r e t v a l  s i g a c t i o n ( signum , &action ,
 NULL ) ;
 i n t main ( i n t argc , char * argv [ ] ) 
 {  i f ( r e t v a l  ) {
 i f ( argc !   ) {  perror ( " sigaction f a i l e d " ) ;
 f p r i n t f ( s t d e r r , " usage : s signum\n "  abort ( ) ;
, argv [  ] ) ;  }
 r e t u r n EXIT_FAILURE ; 
 }  while (  ) {
 int retval ;  p r i n t f ( " [d ] S l e e p i n g . . . \ n " ,
 struct sigaction action ; getpid ( ) ) ;
 i n t signum  a t o i ( argv [  ] ) ;  sleep (  ) ;
  }
 // sigemptyset (& a c t i o n . sa_mask ) ; 
 a c t i o n . sa_handler  s i g _ h a n d l e r ;  r e t u r n EXIT_SUCCESS ;
 s i g a d d s e t (& a c t i o n . sa_mask , signum ) ;  }
 a c t i o n . s a _ f l a g s  SA_RESTART ;
 . . .

 

Vous aimerez peut-être aussi