Co to jest plik?

9

Szukam formalnej definicji pliku, która obejmuje nie tylko pamięć, ale także abstrakcje, takie jak procfs lub / dev / null (lub dowolny plik oparty na bezpieczniku), które nie dotyczą pamięci.

Jak dotąd wiem, że wszystkie pliki to abstrakcje

  • może być zidentyfikowany
  • może mieć nazwy (zwykle zorganizowane w struktury hierarchiczne)
  • można uzyskać dostęp jako strumień bajtów
  • zwykle zapewniają uprawnienia i inne (specyficzne dla systemu) metadane

jednak nie udało mi się znaleźć żadnej przydatnej definicji formalnej w żadnej książce OS, którą przeczytałem do tej pory.

Giacomo Tesio
źródło
spojrzałeś na i-węzły?
Bhaskar,
1
Twierdziłbym, że rzeczy takie jak / dev / null w ogóle nie są plikami, ale raczej są hackami umożliwiającymi nam dostęp do rzeczy nie będących plikami, tak jakby były plikami. Ponadto nie jest dla mnie jasne, co rozumiesz przez „formalny”. W jakim formalizmie?
David Richerby,
„Plik to coś, co można otworzyć za pomocą fopen”?
adrianN
@DavidRicherby każda abstrakcja oprogramowania, która zachowuje się dokładnie tak, jak plik, jest plikiem: możemy zdefiniować jednostki oprogramowania tylko pod względem ich zachowania. Jeśli chodzi o formalizm, szukam czegoś rygorystycznego z perspektywy CS. Mamy formalną definicję, na przykład, maszyn Turinga.
Giacomo Tesio,
Różne systemy operacyjne przypisują różne operacje do plików, patrz np. * Nix vs Windows. Można spróbować znaleźć wspólną płaszczyznę, ale nie będzie to precyzyjne. Ponadto w CS rzadko mówi się o plikach - myślę, że dzieje się to tylko podczas projektowania systemu operacyjnego, systemu plików, być może DBMS lub niektórych algorytmów na dysku (np. Sortowanie-scalanie). (i kilka innych)
chi

Odpowiedzi:

6

Według Wikipedii plik komputerowy jest po prostu zasobem do przechowywania informacji. Wydaje się, że termin ten powstał w erze kart perforowanych, w której program komputerowy był dosłownie przechowywany w pliku (jak w pudełku używanym do przechowywania luźnych stron, patrz zdjęcie poniżej). Wraz z wprowadzeniem innych form mediów, takich jak dyski, nastąpiła nomenklatura.

Z punktu widzenia * nix wszystko jest plikiem: gniazda, urządzenia, terminale, ekrany / monitory, pliki danych, potoki i tak dalej. W przeciwieństwie do tego, Microsoft Windows nazywa „pliki” trwałych danych „zasobami” i lotnymi zasobami takimi, jakimi są, takimi jak nazwane potoki, gniazda, urządzenia rastrowe itp. Inne systemy mogą mieć podobne definicje gdzieś pomiędzy tymi dwoma skrajnościami.

Niestety, jak już wspomniałem, nie ma jednej definicji tego, czym jest plik, ponieważ jest on różny dla różnych osób, z wyjątkiem tego, że wszyscy zgadzają się co do podstawowej definicji, że plik jest nazwanym zasobem przechowującym dane na nośnikach stałych (permanent nie oznacza, że ​​nigdy nie można go modyfikować, po prostu utrzymuje się przez cykle zasilania).

Plik karty dziurkacza]( Wikipedia )

phyrfox
źródło
Przeczytałem definicję wikipedii, ale jest zbyt skoncentrowana na przechowywaniu. Jak już wspomniano, szukam definicji obejmującej pliki takie jak / dev / null, które nie przechowują danych.
Giacomo Tesio,
@GiacomoTesio Dwa punkty, które próbowałem poruszyć, to: (a) plik oznacza różne rzeczy dla różnych autorów, chociaż (b) pliki są co najmniej powszechnie definiowane jako zasoby. NUL i / dev / null są zasobami specjalnymi, ponieważ tak naprawdę niczego nie przechowują, ale są zasobami. Zasób to po prostu coś, co może przesyłać lub odbierać dane (lub jedno i drugie). Definicja pliku w ogólnej książce systemu operacyjnego będzie zależeć od punktu widzenia autora.
phyrfox,
2

Myślę o pliku jako sekwencji bajtów. Nawet po utracie nazwy (zwykle spowodowanej wywołaniem rm, które go rozłącza), nadal istnieje na dysku, dopóki jego fragmenty nie zostaną nadpisane przez inne rzeczy. Formaty plików to konteksty do odczytu plików. Wszystko sprowadza się do zasady, że informacja to bajty plus kontekst.

Poprzedni plakat ma rację, że chociaż urządzenia są traktowane jak pliki, tak naprawdę nie są plikami. To bardzo przydatny hack.

Moja definicja pliku: sekwencja bajtów przechowywanych w pamięci.

ncmathsadist
źródło
2
„Więc moja definicja pliku: sekwencja bajtów”. jest sekwencją (powiedzmy UTF-8) bajtów. Czy to plik?
reinierpost
Mówimy o abstrakcjach oprogramowania, wszystko, co zachowuje się dokładnie tak, jak plik, jest plikiem. W rzeczywistości nie możemy zdefiniować żadnego elementu oprogramowania poza jego zachowaniem.
Giacomo Tesio
„Myślę o pliku jako o sekwencji bajtów”. To nie jedyna definicja „systemu plików”. Patrz na przykład en.wikipedia.org/wiki/Record-oriented_filesystem
pseudonim