mkfifo() atomic??
-
Moin Kollegen!
Ist mkfifo() atomic?
Also ich hab da meine Zweifel schließlich sind EINIGE Aktionen vom kern zu tätigen...Danke für eine Antwort!
Gruß
Karsten
-
Dieser Thread wurde von Moderator/in Shade Of Mine aus dem Forum ANSI C in das Forum Linux/Unix verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.
-
mkfifo atomic?
Du meinst ob lesen oder schreiben bei FIFOs atomic ist, oder?Die Info-Seite der glibc sagt dazu folgendes:
15.4 Atomicity of Pipe I/O ========================== Reading or writing pipe data is "atomic" if the size of data written is not greater than `PIPE_BUF'. This means that the data transfer seems to be an instantaneous unit, in that nothing else in the system can observe a state in which it is partially complete. Atomic I/O may not begin right away (it may need to wait for buffer space or for data), but once it does begin it finishes immediately. Reading or writing a larger amount of data may not be atomic; for example, output data from other processes sharing the descriptor may be interspersed. Also, once `PIPE_BUF' characters have been written, further writes will block until some characters are read.
(Abschnitt "Pipes and FIFOs :: Pipe Atomicity")
-
Moin,
danke für's verschieben... ich hatte eine andere Ansicht des Forum-levels
Nein, ich meine exackt mkfifo() als funktion. Nicht das benutzen von pipes. Also ist das Anlegen einer named-pipe wirklich atomic; mein prozess wird also während dieser Funktion NIE vom kern unterbrochen??
Daaanke schon mal für die Hilfe!
Karsten
-
das anlegen einer pipe über mkfifo macht einen eintrag im dateisystem; also io. da das filesystem normalerweise periodisch "gesynct" wird sollte der aufruf an sich zwar atomar ablaufen, allerdings wird der prozess wohl vom scheduler unterbrochen werden (wie sich das mit ram - disks oder ähnlichem verhält wäss nüschd!) bis der io - auftrag bearbeitet werden kann.
-
Karschie schrieb:
Moin Kollegen!
Ist mkfifo() atomic?
Also ich hab da meine Zweifel schließlich sind EINIGE Aktionen vom kern zu tätigen...mkfifo ist einfach nur ein Wrapper für den Systemcall mknod(2). In mkfifo passiert nichts, außer das noch ein zusätzzlicher parameter an mknod übergeben wird. Systemcalls sind generell atomar, mknod is Systemcall und damit ist auch mkfifo atomar
-
Moin Moin!
Nun, das systemcalls generel atomic sein sollen muss ich verneinen! Das würde die Welt ja sehr vereinfachen
semget() ist ja ein gutes Beispiel dafür da dieser systemcall leider eben nicht atomic ist.
Aber trotzdem vielen Dank für eure Hilfe, ich werd also mknod() benutzen in der Hoffnung das dies portable UND atomic ist..Beste Grüße
Karsten