POSIX definiuje plik tekstowy jako:
Plik zawierający znaki zorganizowane w zero lub więcej wierszy. Wiersze nie zawierają znaków NUL i żaden z nich nie może przekraczać długości {LINE_MAX} bajtów, w tym znaku <nline>. Chociaż POSIX.1-2017 nie rozróżnia plików tekstowych od plików binarnych (patrz standard ISO C), wiele programów narzędziowych generuje przewidywalne lub znaczące wyniki tylko podczas pracy na plikach tekstowych. Standardowe narzędzia, które mają takie ograniczenia, zawsze określają „pliki tekstowe” w swoich sekcjach STDIN lub INPUT FILES.
Źródło: http://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap03.html#tag_03_403
Jest jednak kilka rzeczy, które są niejasne:
Czy plik tekstowy musi być zwykłym plikiem? W powyższym fragmencie nie jest wyraźnie powiedziane, że plik musi być zwykłym plikiem
Czy plik można uznać za plik tekstowy, jeśli zawiera jeden znak i tylko jeden znak (tj. Pojedynczy znak, który nie jest zakończony znakiem nowej linii)? Wiem, że to pytanie może brzmieć dziwnie, ale używają słowa „znaki” zamiast „jednego lub więcej znaków”. Inni mogą się nie zgadzać, ale jeśli mają na myśli „jedną lub więcej postaci”, myślę, że powinni to wyraźnie powiedzieć
W powyższym fragmencie odnosi się do „linii”. Znalazłem cztery definicje z linią w nazwie: „Pusta linia”, „Wyświetlana linia”, „Niekompletna linia” i „Linia”. Czy mam wnioskować, że mają na myśli „linię” z powodu pominięcia „pustych”, „wyświetlanych” i „niekompletnych” - czy też wszystkie cztery z tych definicji są zawarte jako uważane za wiersz w powyższym fragmencie?
Wszystkie pytania, które pojawiają się po tym bloku tekstu, zależą od wniosku, że „znaki” oznaczają „jeden lub więcej znaków”:
- Czy mogę bezpiecznie wywnioskować, że jeśli plik jest pusty, nie jest to plik tekstowy, ponieważ nie zawiera jednego lub więcej znaków?
Wszystkie pytania, które pojawiają się po tym bloku tekstu, zależą od wywnioskowania, że w powyższym fragmencie wiersz jest zdefiniowany jako „Linia” i że należy wykluczyć pozostałe trzy definicje zawierające „Wiersz” w ich nazwie:
Czy „zero” w „zero lub więcej wierszy” oznacza, że plik nadal można uznać za plik tekstowy, jeśli zawiera jeden lub więcej znaków, które nie są zakończone znakiem nowej linii?
Czy „zero lub więcej linii” oznacza, że po wejściu w grę pojedynczej „linii” (0 lub więcej znaków plus kończąca nowa linia), nielegalne staje się, że ostatnia linia jest „niepełną linią” (jedna lub więcej nieukończonych linii) znaki nowego wiersza na końcu pliku)?
Czy „żaden [brak wiersza] nie może przekraczać długości {LINE_MAX} bajtów, w tym znak nowego wiersza” oznacza, że istnieje ograniczenie liczby znaków dozwolonych w dowolnej „linii” w pliku tekstowym (na marginesie wartość LINE_MAX na Ubuntu 18.04 i FreeBSD 11.1 to „2048”)?