Wie erhalte ich mehrere Anrufe zu sem_open Entwicklung in C?
Erlebe ich eine Menge Schwierigkeiten bei der Semaphoren zu arbeiten, auf ein Linux-basiertes system in C.
Den Prozess der meine Bewerbung ist so:
- Anwendung startet
- Anwendung Gabeln in Kind/Eltern
- Jeder Prozess verwendet
sem_open
mit einem gemeinsamen Namen zu öffnen, der semaphore.
Wenn ich das erstellen der semaphore vor der Gabelung, es funktioniert gut. Allerdings, Anforderungen hindern mich daran dies zu tun. Wenn ich versuche zu nennen sem_open
zum zweiten mal bekomme ich ein "Permission Denied" - Fehler (über errno
).
Ist es möglich, dies zu tun, in irgendeiner Weise? Oder gibt es eine Möglichkeit zum öffnen der semaphore in einem Prozess und verwendet ein shared-memory-Mechanismus, zu teilen, mit der Kind-Prozess?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Sind Sie mit der 4-parameter-oder 2-parameter-version von sem_open?
Stellen Sie sicher, dass Sie die 4-parameter-version und einem Modus, der erlaubt anderen Prozessen zu öffnen, die semaphore. Vorausgesetzt, alle Prozesse sind im Besitz des gleichen Benutzers, einen Modus von 0600 (
S_IRUSR | S_IWUSR
) ausreichend sein wird.Möglicherweise möchten Sie auch zu überprüfen, dass Sie die umask nicht ausblenden alle notwendigen Berechtigungen.
O_RDWR
ist nicht die Berechtigungen, die fahne zu bedienen, trotz zeigt sich in jedem Beispiel, das ich finden konnte. Ich danke Ihnen so sehr.Vergessen Sie nicht, geben Sie den Modus und Wert-parameter bei der Verwendung von O_CREAT in den flags.
Hier ist ein funktionierendes Beispiel :