Disussions liées au livre Systèmes d'exploitation paru chez Pearson Education France.
Vous n'êtes pas identifié.
Suite à des abus constatés et provoqués par des connexions de "robots", l'enregistrement de nouveaux utilisateurs est temporairement suspendu. Merci de contacter l'administrateur du site pour s'abonner au forum.
Bonjour à vous.
Je n'ai pas saisi pourquoi, page 107, la fonction write() prends en paramètre l'adresse et non pas le contenu de sem[1]
On voit ainsi noté
write(*sem[1],&buf,1), où sem est un tableau de deux cases.
Ce qui ne me semble pas correct, puisque write est censé écrire dans la case à l'adresse pointée par sem et non pas à l'adresse du pointeur.
Pourriez vous m'expliquer où j'aurai pu me tromper dans mon raisonnement?
Merci!
Hors ligne
Bonjour,
Prenons les choses dans l'ordre.
1. la variable sem est de type 'semaphore *'.
2. le type semaphore est défini par le typedef comme un int[2].
3. Par conséquent, *sem[1] est un entier (le contenu de la deuxième case du tableau pointé par sem)
Si vous faites un 'man write' vous verrez que le premier argument de write est un entier, correspondant au descripteur de fichier dans lequel la fonction doit écrire. Dans notre exemple, c'est l'appel à 'pipe' dans 'sem_init' qui a renseigné le tableau pointé par 'sem' avec les descripteurs de fichiers adéquats.
Ce vous dites est donc faux, lorsque vous supposez que "write est censé écrire dans la case à l'adresse pointée par sem". Write est censé écrire dans le descripteur de fichier contenu dans la case du tableau pointé par sem.
Je peux comprendre que l'explication est un peu difficile à comprendre, mais c'est bien comme ça que cela se passe.
Hors ligne
Je crois comprendre ce que vous voulez dire.
Est-ce que, si l'on avait pris semaphore sem, nous aurions uniquement eu à mettre dans le write sem[1] ?
Hors ligne