Bonjour a tous,

J'utilise des semaphore, et j'aimerais bien faire un 'down' sur un semaphore, mais ne pas attendre si il est deja à 0, j'utilise donc le flag " IPC_NOWAIT" , et l'erreur retourné devrait etre "EAGAIN" si le semaphore est deja à 0, mais apperement il me retourne toujours une autre erreur ;

voici mon code :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
 int retval;
	/* Set up the sembuf structure. */
	operations[0].sem_num = 0;
	operations[0].sem_op = -1;
	operations[0].sem_flg = IPC_NOWAIT;
	/* Faire l'operation */
	retval = semop(semid, operations, 1);
	switch ( retval )
	{
	case ( 0 ):
		/* Do nothing, semphore bien 'downed' */	
		break;
	case ( EAGAIN ):
		printf("on a bien tente mais pas attendu.\n");
		break;
	default:
		perror("semop");
		printf("sema down non effectue.\n");
	}
en faites, il va donc à chaque fois dans le default !!

si quelqu'un saurait m'aider pour résoudre ce probleme !!

Merci d'avance !!

Et bien finalement, j'ai trouvé une solution a mon probleme, je devais tester la variable errno, j'avais pas fait attention a cela !!!

Désolé pour le post mis pour rien, si quelqu'un sait le retirer qu'il n'hésite pas !!