Czy Linux ma wywołania systemowe, aby uzyskać dostęp do wszystkich funkcji obsługiwanych systemów plików?

12

Linux obsługuje wiele systemów plików (na przykład: ext3, NTFS, FAT32 itp.).

Poniższy diagram pokazuje, jak Linux pozwala procesowi na dostęp do plików:

wprowadź opis zdjęcia tutaj

Załóżmy zatem, że w procesie zwanym read()wywołaniem systemowym do odczytu pliku nastąpi przejście do warstwy VFS, a warstwa VFS zdecyduje, do którego sterownika systemu plików uzyskać dostęp na podstawie systemu plików partycji, do której plik czytać rezyduje na.

Linux oferuje wiele wywołań systemowych dostępu do plików (na przykład: read(), write(), rename(), itd.).

Teraz read()i write()i rename()praca na wszystkich systemach plików, który obsługuje Linux.

Istnieją jednak określone funkcje, które istnieją tylko w niektórych systemach plików, a nie w innych. Na przykład: w systemie plików NTFS można ustawić bit archiwizacji dla pliku, ale nie można tego zrobić w systemie plików ext3.

Teraz moje pytanie brzmi: czy Linux ma wywołania systemowe, aby uzyskać dostęp do wszystkich funkcji obsługiwanych systemów plików? na przykład: czy Linux ma wywołanie systemowe do ustawienia bitu archiwum dla pliku w systemie plików NTFS?

użytkownik341642
źródło

Odpowiedzi:

10

czy Linux ma wywołanie systemowe do ustawienia bitu archiwum dla pliku w systemie plików NTFS?

W tym konkretnym przypadku ntfs-3gsterownik eksportuje atrybuty pliku za pomocą atrybutów rozszerzonych , zobacz Czy mogę ustawić bit „Archiwum” dla pliku w systemie NTFS w systemie Linux?

System plików (V) FAT ma podobne atrybuty plików, ale korzysta z ioctl()funkcji, aby uzyskać do nich dostęp, patrz ioctl_fat(2). ( ioctl()to rodzaj uniwersalnego wywołania systemowego, używanego do wszelkiego rodzaju specyficznych dla urządzenia rzeczy, które nie gwarantują prawdziwego wywołania systemowego).

Teraz moje pytanie brzmi: czy Linux ma wywołania systemowe, aby uzyskać dostęp do wszystkich funkcji obsługiwanych systemów plików?

Trudno na pewno odpowiedzieć , ale istnieje co najmniej jeden przykład przeciwny. ext4 wewnętrznie obsługuje znacznik czasu „narodzin” dla plików (np. rzeczywisty czas tworzenia, w przeciwieństwie do ctimezmian w modyfikacji i-węzła). Ale mimo że ext4 jest „standardowym” systemem plików, przez długi czas nie było wywołania systemowego, aby uzyskać dostęp do czasu urodzenia.

Powinno być obsługiwane teraz, z statx()wywołaniem systemowym dodanym w Linuksie 4.11 , w kwietniu 2017 r.

Związane z:

ilkkachu
źródło
3
ntfs! = gruby. Przynajmniej jądrowa wersja ntfs NIE ma sposobu na ustawienie lub pobranie flagi archiwum, chociaż jej nagłówki ją definiują. Wydaje się, że obsługuje go tylko oparty na bezpiecznikach ntfs-3g (poprzez rozszerzone atrybuty, a nie specjalne ioctls).
Wujek Billy
Nie jest to bezpośrednio związane z pytaniem, ale jako uzupełnienie twojej wzmianki o tym statx, jest teraz obsługiwane w bibliotece C oraz w najnowszej wersji coreutils, która została wydana kilka dni temu.
Stephen Kitt
@UncleBilly, d'oh, najwyraźniej nie umiem czytać, ale po prostu automatycznie pomyślałem o (v) tłuszczu. Dzięki za zauważenie tego, zobaczę, czy mogę znaleźć bardziej odpowiednie odniesienie.
ilkkachu