Académique Documents
Professionnel Documents
Culture Documents
sous unix
Groupe Isaip-Esaip
P. Trégouët – A. Schaal
remerciements à M. Benzaïd
pour sa contribution à la rédaction de ce document
Processus
Signaux
Tubes entre processus de filiation commune
Tubes nommés entre processus de filiation différente
File de messages
Segments de mémoire partagée
Sémaphores
Sockets
Programmation
système en C
sous Linux
Terminaison de processus
void exit (int code_retour)
Réseau
CTRL-C SIGINT
CTRL-\ SIGQUIT
CTRL-Z SIGSTP
Erreurs du programme
Violation de mémoire, SIGSEGV
Division par zéro, SIGFPE
Commande kill
Primitive système : kill(), alarm().
#include <unistd.h>
unsigned alarm (unsigned nb)
Attention :
ne pas mélanger l'utilisation de alarm et de sleep
qui partagent le même "timer" (voir man alarm)
#include<unistd.h>
int pause(void);
main()
{int numero;
// traitements spécifiques
for (numero=1;numero<32;numero++)signal(numero,standard);
signal(SIGINT,message); signal(SIGQUIT,message);
//traitements prédéfinis
signal(1,SIG_DFL); signal(4,SIG_IGN);
Création :
#include <unistd.h>
int pipe(int p_desc[2])
p_desc[0] pour la lecture, p_desc[1] pour l’écriture
Entrées/Sorties :
write (p_desc[1], buf_ecrire, nbre_octets)
read (p_desc[0], buf_lire, nbre_octets)
# include <sys/ipc.h>
key_t ftok(const char *pathname,int proj_id);
Drapeaux :
IPC_CREAT : créer un objet s'il n’existe pas
IPC_EXCL : échouer si l'objet existe déjà
IPC_NOWAIT : ne pas attendre
IPC_PRIVATE : clé privée, pas de lien avec le système de
fichiers
Commandes :
IPC_RMID : suppression
IPC_SET : mise à jour des attributs
IPC_STAT : lecture des attributs
Permissions : Analogues à celles du système de fichiers UNIX
mail:/home/demo # ipcs
------ Shared Memory Segments --------
key shmid owner perms bytes nattch statu
0x00000001 720896 root 600 33554432 6 dest
0x00000012 753665 root 600 262144 1 dest
0x00000034 819202 root 600 33554432 11 dest
if (( msqid = msgget(ftok(path,ID),
IPC_CREAT|IPC_EXCL|MSG_R|MSG_W))
== -1)
{
perror("Echec de msgget"); Résultat de l’exécution :
exit(1); identificateur de la file: 700
} cette file est identifiée par la clé
unique : 2064941749
Création :
int shmget(key_t key, int size, int flg) : retour = shm_id
Attachement :
int shmat(int shmid, const void *shmadr, int flg);
Initialisation(sémaphore,n)
valeur[sémaphore] = n
P(sémaphore)
valeur[sémaphore] = valeur[sémaphore] - 1
si (valeur[sémaphore] < 0) alors
étatProcessus = Bloqué
mettre processus en file d’attente
finSi
invoquer l’ordonnanceur
V(sémaphore)
valeur[sémaphore] = valeur[sémaphore] + 1
si (valeur[sémaphore] == 0) alors
extraire processus de file d’attente
étatProcessus = Prêt
finSi
invoquer l’ordonnanceur
Opérations de contrôle :
int semctl(int semid,int semnum,int cmd,
union semun arg)
IPC_RMID, IPC_STAT, IPC_SET,
Commandes spécifiques aux sémaphore :
GETVAL : retourne la valeur d’un sémaphore,
GETPID : retourne le PID du processus effectuant dernière opération,
etc.
processus processus
CLIENT SERVEUR
N°PORT 1 N°PORT 2
Adresse IP 1 Adresse IP 2
Socket Socket
Format réseau
socket() socket()
listen()
connect() accept()
write()/ read()/
Send() Recv() Attente
Transfert de
nouvelle
données
read()/ write()/ connexion
Recv() Send()
close() close()
socket() socket()
Sendto() Recvfrom()
Transfert de
données
Recvfrom() Sendto()
close() close()