2010-11-25 12 views
22

Załóżmy, że otwieram plik z open(). Potem I fork() mój program.Czy deskryptory plików są udostępniane, gdy fork() ing?

Czy ojciec i dziecko mają teraz takie same przesunięcie dla deskryptora pliku?

Mam na myśli, że jeśli napiszę u mojego ojca, przesunięcie zostanie również zmienione u dziecka?

Czy przesunięcia będą niezależne po fork()?

Odpowiedz

28

Od 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

Nie to zależy, gdzie plik został otwarty? Znaczenie, jeśli wywołanie open (nazwa pliku, int ..) jest wykonywane po rozwidleniu lub przed nim. – ArmenB

+1

@Armen: Tak, tak, tak. –

+0

Dziwne jest to, że jeśli instrukcja otwarcia pliku jest wykonywana po rozwidleniu, masz dwa różne deskryptory plików. Ale kiedy próbuję zablokować plik przy pomocy fcntl, nie zadziała. Zarówno rodzic, jak i rodzic ignorują blokadę. – ArmenB

2

One mają takie same przesunięcie.

Powiązane problemy