Je viens d'écrire une verrue à grands coups de #define dans un
programme pour le faire fonctionner sous Mac OS. Mac OS ne connaît
pas les sémaphores anonymes et j'ai bricolé le code suivant pour que
ça passe. Ce n'est pas très propre mais ça fonctionne parfaitement
sous Linux. Sous Mac OS, ça plante bizarrement. Par acquis de
conscience, j'ai passé le truc dans valgrind sans aucune alerte et
j'ai essayé sous NetBSD et sous Solaris. Ça fonctionne correctement
sur tous mes OS de test _sauf_ sur Mac OS. J'avoue de pas trop
comprendre.
Lorsque je veux compiler sous Mac OS (ou sur les autres OS en
émulation), je définis la macro suivante. Il va sans dire que les
variables noms_semaphores et semaphores_nommes sont définies en
variables globales :
EXC_BAD_ACCESS, Could not access memory
Reason: KERN_PROTECTION_FAILURE at address: 0x00000003
(*sem) = (*(semaphores_nommes[semaphore]));
print semaphores_nommes
$1 = { 0x3, 0x0, 0x0, 0x0 }
J'ai essayé memcpy à la place de l'affectation brutale, mais ça ne
change rien au problème.
La question est donc : pourquoi sem_open() renvoit-il 0x3 ?
J'oubliais, le Mac OS X en question est un 10.5.6 x86.
Merci de vos lumières,
JKB
--
Le cerveau, c'est un véritable scandale écologique. Il représente 2% de notre
masse corporelle, mais disperse à lui seul 25% de l'énergie que nous
consommons tous les jours.
MacOS X renvoie un file descriptor lors d'un appel a sem_open(), meme si celui-ci est deguise en pointeur.
Je ne saurais te dire si cela casse une quelconque prescription dans Posix.
Probablement pas :-) Les specs POSIX pour sem_t disent textuellement « The semaphore may be implemented using a file descriptor [...] » (extrait de .../basedefs/semaphore.h.html).
Autrement dit, du code qui *ne* fonctionne *pas* avec des sémaphores implémentés comme des descripteurs de fichiers, ne serait *pas* conforme à l'esprit clairement exprimé de la norme.
Antoine
Bruno Ducrot écrit :
MacOS X renvoie un file descriptor lors d'un appel a sem_open(), meme si
celui-ci est deguise en pointeur.
Je ne saurais te dire si cela casse une quelconque prescription dans
Posix.
Probablement pas :-) Les specs POSIX pour sem_t disent textuellement
« The semaphore may be implemented using a file descriptor [...] »
(extrait de .../basedefs/semaphore.h.html).
Autrement dit, du code qui *ne* fonctionne *pas* avec des sémaphores
implémentés comme des descripteurs de fichiers, ne serait *pas* conforme
à l'esprit clairement exprimé de la norme.
MacOS X renvoie un file descriptor lors d'un appel a sem_open(), meme si celui-ci est deguise en pointeur.
Je ne saurais te dire si cela casse une quelconque prescription dans Posix.
Probablement pas :-) Les specs POSIX pour sem_t disent textuellement « The semaphore may be implemented using a file descriptor [...] » (extrait de .../basedefs/semaphore.h.html).
Autrement dit, du code qui *ne* fonctionne *pas* avec des sémaphores implémentés comme des descripteurs de fichiers, ne serait *pas* conforme à l'esprit clairement exprimé de la norme.
Antoine
Éric Lévénez
Le 19/04/10 11:00, Antoine Leca a écrit :
Bruno Ducrot écrit :
MacOS X renvoie un file descriptor lors d'un appel a sem_open(), meme si celui-ci est deguise en pointeur.
Je ne saurais te dire si cela casse une quelconque prescription dans Posix.
Probablement pas :-) Les specs POSIX pour sem_t disent textuellement « The semaphore may be implemented using a file descriptor [...] » (extrait de .../basedefs/semaphore.h.html).
Autrement dit, du code qui *ne* fonctionne *pas* avec des sémaphores implémentés comme des descripteurs de fichiers, ne serait *pas* conforme à l'esprit clairement exprimé de la norme.
Mais d'un autre côté cela suppose qu'un sémaphore est "sem_t" et pas "sem_t *". Et moi je comprend de Posix que le descripteur de fichier pourrait être "sem_t" (et pas une structure type FILE), alors que sur Mac OS X, le descripteur de fichier est "sem_t *"...
-- Éric Lévénez FAQ de fclc : <http://www.levenez.com/lang/c/faq/>
Le 19/04/10 11:00, Antoine Leca a écrit :
Bruno Ducrot écrit :
MacOS X renvoie un file descriptor lors d'un appel a sem_open(), meme si
celui-ci est deguise en pointeur.
Je ne saurais te dire si cela casse une quelconque prescription dans
Posix.
Probablement pas :-) Les specs POSIX pour sem_t disent textuellement
« The semaphore may be implemented using a file descriptor [...] »
(extrait de .../basedefs/semaphore.h.html).
Autrement dit, du code qui *ne* fonctionne *pas* avec des sémaphores
implémentés comme des descripteurs de fichiers, ne serait *pas* conforme
à l'esprit clairement exprimé de la norme.
Mais d'un autre côté cela suppose qu'un sémaphore est "sem_t" et pas
"sem_t *". Et moi je comprend de Posix que le descripteur de fichier
pourrait être "sem_t" (et pas une structure type FILE), alors que sur
Mac OS X, le descripteur de fichier est "sem_t *"...
--
Éric Lévénez
FAQ de fclc : <http://www.levenez.com/lang/c/faq/>
MacOS X renvoie un file descriptor lors d'un appel a sem_open(), meme si celui-ci est deguise en pointeur.
Je ne saurais te dire si cela casse une quelconque prescription dans Posix.
Probablement pas :-) Les specs POSIX pour sem_t disent textuellement « The semaphore may be implemented using a file descriptor [...] » (extrait de .../basedefs/semaphore.h.html).
Autrement dit, du code qui *ne* fonctionne *pas* avec des sémaphores implémentés comme des descripteurs de fichiers, ne serait *pas* conforme à l'esprit clairement exprimé de la norme.
Mais d'un autre côté cela suppose qu'un sémaphore est "sem_t" et pas "sem_t *". Et moi je comprend de Posix que le descripteur de fichier pourrait être "sem_t" (et pas une structure type FILE), alors que sur Mac OS X, le descripteur de fichier est "sem_t *"...
-- Éric Lévénez FAQ de fclc : <http://www.levenez.com/lang/c/faq/>
JKB
Le 19-04-2010, ? propos de Re: C, Mac OS X et sem_open, Éric Lévénez ?crivait dans fr.comp.lang.c :
Le 19/04/10 11:00, Antoine Leca a écrit :
Bruno Ducrot écrit :
MacOS X renvoie un file descriptor lors d'un appel a sem_open(), meme si celui-ci est deguise en pointeur.
Je ne saurais te dire si cela casse une quelconque prescription dans Posix.
Probablement pas :-) Les specs POSIX pour sem_t disent textuellement « The semaphore may be implemented using a file descriptor [...] » (extrait de .../basedefs/semaphore.h.html).
Autrement dit, du code qui *ne* fonctionne *pas* avec des sémaphores implémentés comme des descripteurs de fichiers, ne serait *pas* conforme à l'esprit clairement exprimé de la norme.
Mais d'un autre côté cela suppose qu'un sémaphore est "sem_t" et pas "sem_t *". Et moi je comprend de Posix que le descripteur de fichier pourrait être "sem_t" (et pas une structure type FILE), alors que sur Mac OS X, le descripteur de fichier est "sem_t *"...
Je plussoie vigoureusement ;-)
JKB
-- Le cerveau, c'est un véritable scandale écologique. Il représente 2% de notre masse corporelle, mais disperse à lui seul 25% de l'énergie que nous consommons tous les jours.
Le 19-04-2010, ? propos de
Re: C, Mac OS X et sem_open,
Éric Lévénez ?crivait dans fr.comp.lang.c :
Le 19/04/10 11:00, Antoine Leca a écrit :
Bruno Ducrot écrit :
MacOS X renvoie un file descriptor lors d'un appel a sem_open(), meme si
celui-ci est deguise en pointeur.
Je ne saurais te dire si cela casse une quelconque prescription dans
Posix.
Probablement pas :-) Les specs POSIX pour sem_t disent textuellement
« The semaphore may be implemented using a file descriptor [...] »
(extrait de .../basedefs/semaphore.h.html).
Autrement dit, du code qui *ne* fonctionne *pas* avec des sémaphores
implémentés comme des descripteurs de fichiers, ne serait *pas* conforme
à l'esprit clairement exprimé de la norme.
Mais d'un autre côté cela suppose qu'un sémaphore est "sem_t" et pas
"sem_t *". Et moi je comprend de Posix que le descripteur de fichier
pourrait être "sem_t" (et pas une structure type FILE), alors que sur
Mac OS X, le descripteur de fichier est "sem_t *"...
Je plussoie vigoureusement ;-)
JKB
--
Le cerveau, c'est un véritable scandale écologique. Il représente 2% de notre
masse corporelle, mais disperse à lui seul 25% de l'énergie que nous
consommons tous les jours.
Le 19-04-2010, ? propos de Re: C, Mac OS X et sem_open, Éric Lévénez ?crivait dans fr.comp.lang.c :
Le 19/04/10 11:00, Antoine Leca a écrit :
Bruno Ducrot écrit :
MacOS X renvoie un file descriptor lors d'un appel a sem_open(), meme si celui-ci est deguise en pointeur.
Je ne saurais te dire si cela casse une quelconque prescription dans Posix.
Probablement pas :-) Les specs POSIX pour sem_t disent textuellement « The semaphore may be implemented using a file descriptor [...] » (extrait de .../basedefs/semaphore.h.html).
Autrement dit, du code qui *ne* fonctionne *pas* avec des sémaphores implémentés comme des descripteurs de fichiers, ne serait *pas* conforme à l'esprit clairement exprimé de la norme.
Mais d'un autre côté cela suppose qu'un sémaphore est "sem_t" et pas "sem_t *". Et moi je comprend de Posix que le descripteur de fichier pourrait être "sem_t" (et pas une structure type FILE), alors que sur Mac OS X, le descripteur de fichier est "sem_t *"...
Je plussoie vigoureusement ;-)
JKB
-- Le cerveau, c'est un véritable scandale écologique. Il représente 2% de notre masse corporelle, mais disperse à lui seul 25% de l'énergie que nous consommons tous les jours.