2010-11-25 4 views
22

Angenommen, ich öffne eine Datei mit open(). Dann habe ich fork() mein Programm.Sind Dateibeschreibungen bei fork() ing geteilt?

Haben Vater und Kind jetzt den gleichen Offset für den Dateideskriptor?

Ich meine, wenn ich in meinem Vater schreibe, wird der Offset in Kind auch geändert?

Oder werden die Offsets nach der fork() unabhängig sein?

Antwort

28

Von fork(2):

* The child inherits copies of the parent’s set of open file descrip- 
    tors. Each file descriptor in the child refers to the same open 
    file description (see open(2)) as the corresponding file descriptor 
    in the parent. This means that the two descriptors share open file 
    status flags, current file offset, and signal-driven I/O attributes 
    (see the description of F_SETOWN and F_SETSIG in fcntl(2)). 
+1

Ist dies nicht abhängen, wo die Datei geöffnet wurde? Dies bedeutet, dass der Aufruf von open (Dateiname, int ..) nach der Verzweigung oder davor erfolgt. – ArmenB

+1

@Armen: Ja, ja, tut es. –

+0

Die seltsame Sache ist, wenn die Datei open-Anweisung nach dem fork gemacht wird, dann haben Sie zwei verschiedene Dateideskriptoren. Aber wenn ich versuche, die Datei mit fcntl zu sperren, wird es nicht funktionieren. Sowohl das Kind als auch die Eltern ignorieren die Sperre – ArmenB

2

Sie teilen sich den gleichen Offset.