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?
źródło
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?
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.