Frage

Ich habe 10 Prozesse laufen, die jeweils auf die gleiche Datei zu schreiben. Ich will nicht, mehrere Autoren, so dass im Grunde mich für einen Mutex / Binärsemaphore Suche zu schützen Datei schreibt. Das Problem ist, ich kann nicht die Semaphore unter 10 Prozesse teilen, so dass ich bin auf der Suche Shared Memory zwischen 10 verarbeitet, und die Semaphore innerhalb Shared Memory setzen, damit es von jedem Prozess zugegriffen werden.

Kann mir jemand auf die Dokumentation zu diesem Thema in C / C ++ für Unix zeigen? Beispielcode, diese Struktur zu verwenden, wäre toll.

Danke

War es hilfreich?

Lösung

Es klingt wie Sie dran mit flock(2) seien besser:

flock(fd, LOCK_EX);
n = write(fd, buf, count);
flock(fd, LOCK_UN);

Andere Tipps

Setzen einen Semaphor in gemeinsam genutzten Speicher ist nicht die beste Lösung für dieses Problem (wenn es überhaupt funktionieren würde). Sie sollten das Sperren von Dateien untersuchen, die eine UNIX-Funktion ist speziell unter Datei Autoren bieten Exklusivität entwickelt.

Im Einzelnen finden Sie unter:

Für weitere zusätzliche Erläuterungen finden Sie unter Advanced Programming in der UNIX-Umgebung, Abschnitt 14.3

Schauen Sie sich auf UNIX Network Programming Vol. 2 von Richard Stevens.

Es ist ein bestes Buch, das jemals über dieses Thema geschrieben.

Sie könnten PTHREAD mutexes verwenden. Während ein Mutex initilazing müssen Sie pthread_mutexattr_setpshared Funktion, um den Mutex verwenden über Prozesse geteilt und diese dann in einem gemeinsam genutzten Speicher abgelegt. Alle Prozesse können auf den gemeinsamen Speicher anhängen und dann den Mutex zugreifen zu können.

Auch Sie könnten zusätzliche Attribute der SHM hinzufügen auf der Grundlage Ihrer Sperranforderung (rekursiv, etc.,)

Wie wäre es UNIX IPC mit einer gemeinsamen Warteschlange zu erstellen. Ein Verfahren liest die Warteschlange und schreibt in Datei, alle anderen Prozesse Daten in die Warteschlange schieben.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top