Deck de flashcards
Toutes les primitives système et patterns C des 6 cours, condensés en cartes. fork/exec/wait, signaux, sémaphores, tubes (pipe/mkfifo), threads pthread, sockets TCP/UDP, files de messages.
1. Cours 1 — Introduction et appels système
Aller au chapitre complet ↗
fork()
Retourne quoi dans le père / fils ?
exec*
Que devient le processus ?
wait vs waitpid
Différence.
wait attend n'importe quel fils. waitpid(pid, status, opts) cible un PID précis et accepte WNOHANG.Processus zombie
Définition.
wait() ou à la mort du père (adoption par init).WIFEXITED / WEXITSTATUS
Usage.
wait(&status) : WIFEXITED(status) = vrai si sortie normale, WEXITSTATUS(status) = code de retour (0-255).getpid / getppid
Que renvoient-ils ?
getpid() = PID du processus courant. getppid() = PID du père.Trois modes de passage
En C, paramètre d'une fonction.
2. Cours 2 — Signaux & sémaphores
Aller au chapitre complet ↗
sigaction
Pourquoi préférer à signal ?
SA_RESTART, SA_SIGINFO). signal a un comportement variable selon Unix.SIGINT, SIGQUIT, SIGTERM, SIGKILL
Rôles.
Ignorer un signal
Comment ?
signal(sig, SIG_IGN) ou sa.sa_handler = SIG_IGN. Inopérant sur SIGKILL et SIGSTOP.kill
Signature et usage.
int kill(pid_t pid, int sig);. Envoie le signal sig au processus pid. Peut servir à tester l'existence d'un PID avec sig = 0.Sémaphore
Définition + 2 opérations.
P(s) (wait, décrémente, bloque si négatif). V(s) (post, incrémente, débloque).Primitives POSIX
4 fonctions sémaphores.
sem_init, sem_wait, sem_post, sem_destroy. Inclure <semaphore.h>.Mutex = sémaphore initial 1
Schéma de section critique.
sem_wait(&mutex) → section critique → sem_post(&mutex). Garantit qu'un seul processus à la fois.3. Cours 3 — Tubes
Aller au chapitre complet ↗
pipe
Signature et orientation.
int pipe(int p[2]). p[0] = lecture, p[1] = écriture. Mnémonique : 0 = stdin, 1 = stdout.Tube anonyme vs nommé
Différence clé.
p), pas de parenté requise.Séquence pipe + fork
Ordre canonique.
pipe() 2. fork() 3. Chaque processus close() le descripteur inutile 4. read/write 5. close final.SIGPIPE
Quand est-il envoyé ?
write sur un tube dont tous les lecteurs sont fermés. Comportement par défaut : fin du processus écrivain.read sur tube vide
Comportement.
dup2(fd, 0)
Effet.
read(0, ...) ou scanf lit depuis fd. Pour rediriger stdout : dup2(fd, 1).mkfifo
Signature et usage shell.
int mkfifo(const char* nom, mode_t mode). Shell : mkfifo /tmp/tube. Apparaît dans ls -l avec type p.open bloquant sur tube nommé
Pourquoi ?
O_RDONLY attend un écrivain, O_WRONLY attend un lecteur. Bypass avec O_NONBLOCK.4. Cours 4 — Threads POSIX
Aller au chapitre complet ↗
pthread_create
Signature simplifiée.
pthread_create(&tid, attr, fonction, arg). La fonction doit retourner void* et prendre void*.pthread_join
Rôle.
tid (équivalent de wait pour processus). Récupère sa valeur de retour.Threads partagent quoi ?
Liste.
Mutex POSIX
3 fonctions principales.
pthread_mutex_init, pthread_mutex_lock, pthread_mutex_unlock. Initialisation rapide : PTHREAD_MUTEX_INITIALIZER.Compilation pthread
Flag obligatoire.
gcc fichier.c -lpthread -o prog (ou -pthread). Sans ça : undefined reference.Race condition
Définition.
Interblocage (deadlock)
Conditions de Coffman.
5. Cours 5 — Sockets TCP/UDP
Aller au chapitre complet ↗
TCP vs UDP
Type de socket.
SOCK_STREAM, connecté, fiable, ordonné. UDP = SOCK_DGRAM, sans connexion, non fiable.Séquence serveur TCP
5 appels.
socket → bind → listen → accept → read/write → close. accept renvoie un nouveau socket pour le dialogue.Séquence client TCP
4 appels.
socket → connect → write/read → close.Séquence UDP
Côté serveur et client.
socket + bind + recvfrom/sendto. Client : socket + sendto/recvfrom (pas de bind nécessaire).htons / ntohs
Rôle.
htonl/ntohl.inet_aton / inet_ntoa
Sens.
inet_aton : texte « 192.168.1.10 » → binaire in_addr. inet_ntoa : inverse.INADDR_ANY
Quand l'utiliser ?
bind sur toutes les interfaces locales (loopback, ethernet, wifi…). Évite de hardcoder une IP.Serveur multi-clients
3 stratégies.
6. Cours 6 — Files de messages
Aller au chapitre complet ↗
msgget
Rôle.
IPC_PRIVATE pour une nouvelle file privée.Structure d'un message
Format obligatoire.
struct msg { long type; char payload[N]; };. Le premier champ doit être un long nommé type (utilisé pour le filtrage).msgsnd / msgrcv
Filtrage par type.
msgrcv(mq, &m, taille, T, flags) récupère un message avec : T > 0 = type exact, T = 0 = n'importe quel, T < 0 = type ≤ |T|.msgctl
Usage principal.
msgctl(mq, IPC_RMID, NULL) supprime la file. À faire en fin de programme sinon la file persiste dans le noyau.Avantage vs pipe
2 différences clés.
Persistance
Quand la file disparaît ?
msgctl(IPC_RMID) ou redémarrage de la machine. Survit à la mort des processus créateurs.ipcs / ipcrm
Outils shell.
ipcs -q liste les files. ipcrm -q ID en supprime une. Utile pour nettoyer après un programme buggué.