Gdy plik zostanie przeniesiony, a plik docelowy już istnieje i jest obecnie odczytywany, czy operacja się powiedzie? Czy będzie to zależeć od czasu trwania operacji odczytu pliku docelowego?
Gdy plik zostanie przeniesiony, a plik docelowy już istnieje i jest obecnie odczytywany, czy operacja się powiedzie? Czy będzie to zależeć od czasu trwania operacji odczytu pliku docelowego?
Odpowiedzi:
Operacja odczytu zakończy się powodzeniem, niezależnie od czasu potrzebnego na zakończenie operacji odczytu.
Dlaczego i jak to działa?
Gdy rozpoczyna się operacja odczytu, i- węzeł pliku jest używany jako uchwyt, z którego odczytywana jest zawartość pliku.
Podczas przenoszenia innego pliku do pliku docelowego powstanie nowy i-węzeł, co oznacza, że fizyczna zawartość pliku na dysku zostanie umieszczona gdzieś indziej, a oryginalna zawartość czytanego pliku nie zostanie zmieniona.
Jedyną wspólną cechą jest ścieżka / nazwa pliku, podczas gdy zmienia się podstawowa i-węzeł i położenie fiskalne na dysku.
Po zakończeniu operacji odczytu (pod warunkiem, że żaden inny proces nie ma otwartego uchwytu pliku na starym pliku i nie ma żadnych innych dowiązań twardych odwołujących się do jego i-węzła), stare dane zostaną odrzucone.
Po zakończeniu operacji przenoszenia plik będzie miał nowy numer indeksu i-węzłów.
Można wyświetlić numer indeksu i-węzła plików za pomocą ls -i /tmp/some-file
.
Z tego samego powodu, co opisano powyżej, możliwe jest usunięcie plików, które są nadal używane przez aplikację, ponieważ aplikacje korzystające z pliku będą po prostu czytać z i-węzła (wskazując na rzeczywistą zawartość pliku na dysku), podczas gdy pliki odniesienia w systemie plików jest usuwany.