[so] [Tema2][Linux]Deschidere semafoare
Razvan Deaconescu
razvan.deaconescu at cs.pub.ro
Mon Apr 20 00:15:36 EEST 2009
On Sun, 2009-04-19 at 23:49 +0300, mihai chiritescu wrote:
> In server am pus:
> sem[i] = sem_open(sem_names[i], O_CREAT | O_WRONLY, 0777, 1);
> in loc de
> sem[i] = sem_open(sem_names[i], O_CREAT | O_RDWR, 0777, 1);
>
> iar in client:
> sem[i] = sem_open(sem_names[i],O_RDONLY);
> in loc de
> sem[i] = sem_open(sem_names[i],O_RDWR);
> Si totul a mers perfect.
Mda, este vina noastra. Cred ca am fost bauti rau in saptamana cu
laboratorul 5 :-P incat nu ne-am dat seama ca nu este corecta rezolvarea
cu semafoare din laborator.
Citat din pagina de manual:
---
The oflag argument controls whether the semaphore is created or merely
accessed by the call to sem_open(). The following flag bits may be set
in oflag:
O_CREAT
<snip>
O_EXCL
<snip>
If flags other than O_CREAT and O_EXCL are specified in the oflag
parameter, the effect is unspecified.
---
Nu au sens O_RDONLY, O_WRONLY sau O_RDWR ca al doilea argument la
sem_open. Mai mult, duc la efecte nedorite/nespecificate.
Altfel spus, singurele posibilitati pentru al doilea argument sunt:
0 - se deschide semaforul
O_CREAT - se creeaza semaforul daca nu exista; se deschide daca exista
O_CREAT | O_EXCL - se creeaza semaforul daca nu exista; se intoarce cu
eroare daca exista.
Sursele confirma acest lucru[2].
Scuze de greseala. Vom corecta si in solutiile laboratorul.
Razvan
P.S.: Nu am creat nici un program care sa verifice. M-am bazat pe surse
si pe descrierea din pagina de manual.
[1] http://www.opengroup.org/onlinepubs/000095399/functions/sem_open.html
[2] http://koala.cs.pub.ro/lxr/glibc/nptl/sem_open.c#L227
More information about the so
mailing list