[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