Bonjour, je reçois un message d'erreur venant de semop : invalid argument lorsque je fais wait_s(semid,mutex). 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
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
 
int semid = sem_create(2);
#define mutex 0
sem_init(semid,mutex,1);
#define completed 1
sem_init(semid,completed,1);
/* fonctions permettant de manipuler les sémaphores */
int sem_create(int num_semaphores)
/* Crée un set de num_semaphores semaphores */
	{
		int semid;
		if ((semid = semget(IPC_PRIVATE, num_semaphores, IPC_CREAT | 0666 )) < 0)
		{
			perror("Erreur en créant les sémaphores");
			exit(1);
		}
		return semid;
	}
void sem_init(int semid, int index,int value)
/* Initialise un sémaphore index du set semid à la valeur value */
	{
		if (semctl(semid,index,SETVAL,value) <0)
		{
			perror("Erreur en initialisant les sémaphores");
			exit(1);
		}
	}
void signal_s(int semid, int index)
        {
		struct sembuf sb;
		sb.sem_num = index;
		sb.sem_op = 1;
		sb.sem_flg = 0;
		if (semop(semid,&sb,1) == -1)
		{
			perror("Erreur dans signal_s");
			exit(1);
		}
	}
void wait_s(int semid, int index) {
		struct sembuf sb;
		sb.sem_num = index;
		sb.sem_op = -1;
		sb.sem_flg = 0;
		if (semop(semid,&sb,1) != 0)
		{
			perror("Erreur dans wait_s");
			exit(1);
		}
	}
En gros, je crée un set de deux sémaphores et j'implémente deux fonctions signal et wait (souvent V et P)
Pouvez-vous me dire quelle est mon erreur?