Koniec pliku - End-of-file

W obliczeniowej , EOF ( EOF ) jest stanem, w komputerowym systemie operacyjnym , kiedy nie można odczytać danych ze źródła danych. Źródło danych jest zwykle nazywane plikiem lub strumieniem .

Detale

W standardowej bibliotece C funkcje odczytu znaków, takie jak getchar, zwracają wartość równą wartości symbolicznej (makro), EOFaby wskazać, że wystąpił warunek końca pliku. Rzeczywista wartość EOFjest zależna od implementacji i musi być ujemna (ale zwykle wynosi -1, tak jak w glibc ). Funkcje odczytu bloków zwracają liczbę odczytanych bajtów, a jeśli jest ona mniejsza niż wymagana , oznacza to, że osiągnięto koniec pliku lub wystąpił błąd (sprawdzenie errnolub funkcja dedykowana, taka jak ferrorczęsto wymagana do określenia której).

Znak EOF

Wejście z terminala tak naprawdę nigdy się nie „kończy” (chyba że urządzenie jest odłączone), ale przydatne jest wprowadzenie więcej niż jednego „pliku” do terminala, więc sekwencja klawiszy jest zarezerwowana do wskazania końca wejścia. W systemie UNIX tłumaczenie naciśnięcia klawisza na EOF jest wykonywane przez sterownik terminala, więc program nie musi odróżniać terminali od innych plików wejściowych. Domyślnie sterownik konwertuje znak Control-D na początku wiersza na wskaźnik końca pliku. Aby wstawić rzeczywisty znak Control-D (ASCII 04) do strumienia wejściowego, użytkownik poprzedza go znakiem polecenia „cytat” (zwykle Control-V ). AmigaDOS jest podobny, ale używa Control-\ zamiast Control-D.

W DOS i Windows (oraz w CP/M i wielu systemach operacyjnych DEC , takich jak RT-11 lub VMS ), odczyt z terminala nigdy nie wygeneruje EOF. Zamiast tego programy rozpoznają, że źródłem jest terminal (lub inne "urządzenie znakowe") i interpretują dany zarezerwowany znak lub sekwencję jako wskaźnik końca pliku; najczęściej jest to ASCII Control-Z , kod 26. Niektóre programy MS-DOS, w tym części powłoki Microsoft MS-DOS ( COMMAND.COM ) i programy narzędziowe systemu operacyjnego (takie jak EDLIN ), traktują Control-Z w pliku tekstowym jako oznaczenie końca znaczących danych i/lub dodaj Control-Z na końcu podczas zapisywania pliku tekstowego. Dokonano tego z dwóch powodów:

  • Kompatybilność wsteczna z CP/M . System plików CP/M zapisywał tylko długości plików w wielokrotnościach 128-bajtowych „rekordów”, więc zgodnie z konwencją znak Control-Z był używany do oznaczania końca znaczących danych, jeśli kończyły się one w środku rekordu. System plików MS-DOS zawsze rejestrował dokładną długość plików, więc nigdy nie było to konieczne w MS-DOS.
  • Pozwala programom używać tego samego kodu do odczytywania danych wejściowych zarówno z terminala, jak i pliku tekstowego.

W standardzie taśm magnetycznych ANSI X3.27-1969 koniec pliku był wskazywany przez znacznik taśmy , który składał się z przerwy około 3,5 cala taśmy, po której następował pojedynczy bajt zawierający znak 13 (szesnastkowy) dla dziewięciu ścieżek taśmy i 17 (ósemkowe) dla taśm siedmiościeżkowych . Końcówki taśmy , często w skrócie jako EOT został wskazany przez dwa znaki taśmowych. Był to standard używany na przykład w IBM 360 . Pasek odblaskowy, który był używany do informowania o zbliżającym się fizycznym końcu taśmy, był również nazywany znacznikiem EOT .

Zobacz też

Bibliografia

  1. ^ Wayne Pollock. "Shell Here Document Przegląd" . hccfl.edu. Zarchiwizowane od oryginału dnia 2014-05-29 . Pobrano 28.05.2014 .
  2. ^ „Biblioteka GNU C” . www.gnu.org .
  3. ^ „Transfer taśm (przed 1977): Exchange Media: MARC 21 Specyfikacje dotyczące struktury rekordów, zestawów znaków i nośników wymiany (Biblioteka Kongresu)” . www.loc.gov .