2013-01-07 12 views
6

Nie mam pojęcia o tabelach plików systemu Unix.Unixowe tabele plików systemowych

  • Gdy dwa lub więcej procesów otwarcia pliku do odczytu, czy stół plik systemowy tworzyć oddzielne wpisy dla każdego procesu lub pojedynczy wpis?

  • Jeśli pojedyncza pozycja jest tworzona dla wielu procesów otwierających ten sam plik, czy ich przesunięcia plików będą również takie same?

  • Jeśli process 1 otwiera file1.txt do czytania i process 2 otwiera ten sam plik file1.txt do pisania, będzie stół plik systemowy utworzyć jeden lub dwa wpisy?

+0

Dup z http://stackoverflow.com/questions/4277289/are-file-descriptors-shared-when-forking –

+0

Sir jak może być to duplikat? pyta o rodzicielskie dziecko i widelec, moje pytanie jest inne – Alfred

Odpowiedz

19

Istnieją trzy stoły „File System”: Jest stół deskryptor pliku, który odwzorowuje deskryptory plików (małych liczb) do pozycji otwartej w tabeli plików. Każdy wpis w tabeli otwartego pliku zawiera (między innymi) przesunięcie pliku i wskaźnik do tabeli i-in w pamięci. Oto zdjęcie: http://www.cs.ucsb.edu/~rich/class/cs170/notes/FileSystem/filetable.rich.jpg

Więc nie jest ani tylko wpis w tabeli jeden plik do otwartego pliku nie jest tam tylko po jednej w procesie ... jest jedna za open() rozmowy i jest on dzielony czy deskryptor pliku jest dup() ed lub fork() wyd.

odpowiadając na pytania:

1) Gdy dwie lub więcej procesów otwarcia pliku do odczytu, nie ma wpisu w otwartej tabeli plików za otwarty. Istnieje nawet jeden wpis na otwarty, jeśli proces jeden otwiera plik wiele razy.

2) Pojedynczy wpis to nie utworzony w otwartej tabeli plików dla różnych procesów otwierania tego samego pliku (ale jest tylko jeden wpis w tabeli i-in w pamięci).

3) Jeśli plik1.txt jest otwierany dwukrotnie, w tym samym lub w dwóch różnych procesach, istnieją dwa różne wpisy w tabeli otwartych plików (ale tylko jeden wpis w tabeli i-węzłów w pamięci).

+0

Pytam o tabelę plików systemowych. – Alfred

+2

Istnieje otwarta tabela plików i istnieje tabela i-węzłów w pamięci ... obie te tabele są "systemowymi" plikami, ponieważ są utrzymywane przez system (OS). Twoje pytanie dotyczy otwierania plików, więc musi dotyczyć pierwszego, a nie drugiego. –

+0

O ile mi wiadomo, jako trzy tabele (przynajmniej).Tabela deskryptorów plików, tabela plików systemowych i tabela węzłów pamięci – Alfred

0

Ten sam plik może być otwierany jednocześnie przez kilka procesów, a nawet przez ten sam proces (co powoduje kilka deskryptorów plików dla tego samego pliku) w zależności od organizacji plików i systemu plików. Operacje na deskryptorach takich jak przesuwanie wskaźnika pliku lub zamykanie go są niezależne (nie mają wpływu na inne deskryptory dla tego samego pliku). Operacje pliku (np. Zapis) można zobaczyć za pomocą operacji na innych deskryptorach (odczyt z tyłu może odczytać zapisane dane).

To z open(System call) wiki page

Powiązane problemy