Probleme sémaphore sous Solaris

Probleme sémaphore sous Solaris - Codes et scripts - Linux et OS Alternatifs

Marsh Posté le 23-02-2005 à 11:55:37    

Salut
Je voudrais utiliser des sémaphores nommés sous Solaris 8.
J'ai le problème suivant :  
 

Code :
  1. sem_t * sem = sem_open("/foo",O_CREAT,0x666,1);
  2. // le sémaphore est créé
  3. sem_close(sem);
  4. // le sémaphore est fermé mais pas effacé
  5. sem_t * sem2 = sem_open("/foo",O_CREAT,0x666,1);
  6. // ce code devrait me réouvrir le sémaphore, mais il me retourne  
  7. // l'erreur 13 : EACCESS


 
Pourquoi cette erreur ? Le sémaphore existe bien, mais je n'ai pas le droit de l'ouvrir. Pourtant les droits 666 correspondent bien à un acces total non ?
 
Merci de m'aider !
A+

Reply

Marsh Posté le 23-02-2005 à 11:55:37   

Reply

Marsh Posté le 23-02-2005 à 13:04:08    

Citation :


           The named semaphore exists and the O_RDWR  permissions
           are  denied, or the named semaphore does not exist and
           permission to create the named semaphore is denied.


---------------
trainoo.com, c'est fini
Reply

Marsh Posté le 23-02-2005 à 13:06:57    

bin justement !!
il me semble que avec 0x666, le bit O_RDWR doit être positionné !
et le sémaphore existe puisqu'il a été créé avant.

Reply

Marsh Posté le 23-02-2005 à 13:28:30    


 
Et si, au lieu d'utiliser la valeur "0x666" tu utilisais la valeur "O_RDWR" ?
Peut-être que "0x666" (moi j'aurais d'ailleurs écrit la valeur sous forme octale 0666) n'est pas égal à "O_RDWR"

Reply

Marsh Posté le 23-02-2005 à 13:31:52    

c'est ce que j'etais en train de me dire en relisant le man pour la 12e fois, c pas hexa c'est octal...
je vais essayer ca, je reviens !

Reply

Marsh Posté le 23-02-2005 à 13:33:39    


Octal ou hexa, si tu utilises la macro "O_RDWR" qui est faite pour ça, tu auras pas de soucis...
 
(tiens, l'est pas revenu donc je présume que ça a marché... ;-)


Message édité par Sve@r le 23-02-2005 à 15:31:59
Reply

Marsh Posté le 23-02-2005 à 22:24:59    

C'était bien ça !
J'ai utilisé les macros et ca a marché
 
En fait il fallait mettre 0666 au lieu de 0x666
 

Reply

Marsh Posté le 24-02-2005 à 13:18:00    


 
En fait, en y réfléchissant, c'était évident.
0x666 = 1638
0666 = 438
Donc 0x666 ne correspondait pas à 0666.
 
Le plus drôle, c'est que quand j'ai écrit "moi j'aurais mis 0666" dans mon premier post, je l'ai mis par habitude mais je ne voyais pas de différence entre 0666 et 0x666. Je considérais chaque nombre de façon individuelle et je pensais "de toute façon ca change rien puisque 6 hexa c'est 6 octal".
C'est bien plus tard, après avoir lu ton post suivant, que j'ai réalisé que c'était pas du tout pareil parce que 0x666 c'est un nombre global et pas une concaténation de trois valeurs comme on l'apprend dans le "chmod".
:lol:


Message édité par Sve@r le 24-02-2005 à 13:19:08
Reply

Marsh Posté le 25-02-2005 à 19:14:35    

Voila c'est ca, 0x666 c'est 4 bits par chiffre alors que 0666 y'en a que 3, ca décale tout !
 
Ca marche maintenant

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed