Zauważyłem, że w systemach innych niż Windows .... tj. Linux / Mac mogę robić takie rzeczy jak: - Wyślij zip znajomemu ponad cel - Usuń plik, gdy jest w trakcie przesyłania
I transfer nie kończy się niepowodzeniem.
Lub mogę wykonać operacje takie jak ... - rozpocząć film - usunąć plik - film nadal jest odtwarzany do końca (odczyt z dysku, nie tylko buforowany w pamięci)
Chociaż pliki są „usuwane”, jak już wspomniałem, w rzeczywistości są przenoszone do innej lokalizacji w systemie plików ... tj. Do katalogu Kosz lub coś takiego. Wydaje mi się więc, że system operacyjny używa wskaźnika @ pliku, który jest aktualizowany, gdy się przesuwa, zamiast bezpośredniego dostępu do plików.
Czy ktoś może rzucić nieco światła na to, jak ta NIESAMOWITA funkcja jest rzeczywiście wdrażana? Nie jestem nawet pewien, co należy znaleźć w Google, aby dowiedzieć się więcej na ten temat.
Dziękuję Ci.
źródło
Odpowiedzi:
Pozycja katalogu jest tylko wskaźnikiem do i-węzła. I-węzeł zawiera meta-informacje o pliku (inne niż nazwa) i wskazuje dane pliku (jeśli istnieją). Kiedy zaczynasz kopiować plik, dostajesz uchwyt do i-węzła.
System operacyjny utrzymuje liczbę odwołań do i-węzła. Tak długo, jak istnieją odwołania do i-węzła, i-węzeł i dane pliku są przechowywane. Po usunięciu wszystkich odniesień do i-węzła, i-węzeł jest, a przestrzeń wymagana przez plik zostaje zwolniona.
Ponieważ plik jest otwarty do kopiowania, będzie on przechowywany do momentu zamknięcia pliku przez proces. Powinno to nastąpić po zakończeniu przesyłania pliku i nastąpi w przypadku niepowodzenia procesu kopiowania. Jeśli przesyłanie pliku nie powiedzie się w połowie i usunięte zostaną wszystkie twarde łącza do pliku, nie będzie można ponownie uruchomić transferu.
EDYCJA: Jak zauważyli inni, przenoszenie plików na tym samym urządzeniu odbywa się bez przenoszenia danych. Zamiast tego tworzony jest nowy wpis katalogu w katalogu docelowym, a oryginalny wpis katalogu jest usuwany.
Możliwe jest posiadanie wielu pozycji katalogu dla tego samego pliku. Są to tak zwane twarde linki. Są tworzone przez utworzenie nowej pozycji katalogu dla pliku bez usuwania oryginalnej pozycji. I-węzeł systemu plików ma liczbę odwołań do rejestrowania liczby pozycji katalogu wskazujących na plik.
EDYCJA 2: Jeśli proces ulegnie awarii lub zostanie zabity, plik zostanie całkowicie usunięty, ponieważ liczba dostępu do pamięci zostanie zmniejszona do zera. Jest to akcja, która ma miejsce, gdy program kończy się normalnie.
W przypadku awarii zasilania lub innego nieuporządkowanego zamknięcia systemu dysk będzie wymagał
fsck
(sprawdzenia systemu plików), zanim będzie można go w pełni zamontować. W zależności od stanu i-węzła i struktury katalogów na dysku przestrzeń zostanie odzyskana, plik pozostanie w katalogu lub zostanie utworzony nowy wpis wlost+found
katalogu. Wyniki będą zależeć od tego, które zmiany zostały opróżnione na dysk lub zapisane w dzienniku systemów plików.źródło
/tmp
i natychmiastoweunlink(2)
. W tym momencie nie ma pliku w katalogu (więc nie ma nic do wyczyszczenia przy wyjściu lub awarii), ale twój proces nadal ma dostęp do pliku i żaden inny proces nie może przypadkowo lub celowo z nim zadzierać. To ilustruje interesującą właściwość.Jak wyjaśnił Matt Jenkins, system operacyjny (system plików) śledzi pliki, które są otwarte przez aplikacje. Tak długo, jak proces utrzymuje plik otwarty, jego dane pozostają na dysku (nawet jeśli został on usunięty i nie jest już widoczny ani dostępny dla innych programów).
Zauważ, że konsekwencją tego jest to, że przestrzeń zajmowaną przez plik można odzyskać dopiero po zamknięciu go przez ostatni proces, który go używa. Oto często zadawane pytania dotyczące operacji na systemie plików Linux / Unix: „Polecenie„ df ”mówi, że partycja jest pełna, a„ du ”zgłasza wolne miejsce” (patrz np. Http://batleth.sapienti-sat.org/projects/FAQs/ext3- faq.html ). Jeśli potrzebujesz zwolnić miejsce, nie wystarczy usunąć duże pliki (np. Pliki dziennika), musisz także upewnić się, że żaden proces nie utrzymuje ich w stanie otwartym (zwykle problem z plikami dziennika).
źródło
To jest całkiem proste. Plik utrzymuje listę referencji - procesów, które uzyskują dostęp do pliku. Po usunięciu pliku po prostu usuwa on wpis z katalogu, ale nie sam plik. Programy, które nadal mają otwarty plik, nadal mogą uzyskać do niego dostęp. Plik jest faktycznie usuwany tylko wtedy, gdy wszystkie programy, które uzyskują do niego dostęp, zamykają go.
Ponadto przy przenoszeniu pliku - jeśli znajduje się w tym samym systemie plików - plik tak naprawdę się nie przesuwa, po prostu zmienia wskaźnik do katalogu, w którym znajduje się plik.
źródło
W systemach plików unix plik może mieć jedno lub więcej twardych łączy do niego. Plik żyje, dopóki jest co najmniej jeden. Po usunięciu ostatniego miejsca miejsce w pliku zostaje zwolnione. powyższy link daje punkt wyjścia do dalszego czytania - szczególnie sekcja „Licznik linków”.
źródło