POSIX определяет текстовый файл как:
Файл, содержащий символы, организованные в ноль или более строк. Строки не содержат символов NUL, и ни одна из них не может превышать длину {LINE_MAX} байтов, включая символ <newline>. Хотя POSIX.1-2017 не делает различий между текстовыми файлами и двоичными файлами (см. Стандарт ISO C), многие утилиты производят только предсказуемый или значимый вывод при работе с текстовыми файлами. Стандартные утилиты, имеющие такие ограничения, всегда указывают «текстовые файлы» в своих разделах STDIN или INPUT FILES.
Источник: http://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap03.html#tag_03_403
Однако есть несколько вещей, которые я нахожу неясными:
Должен ли текстовый файл быть обычным файлом? В приведенном выше отрывке явно не говорится, что файл должен быть обычным файлом.
Может ли файл считаться текстовым файлом, если он содержит только один символ и только один символ (т. Е. Один символ, который не заканчивается новой строкой)? Я знаю, что этот вопрос может звучать неприметно, но они используют слово «символы» вместо «один или несколько символов». Другие могут не согласиться, но если они имеют в виду «один или несколько символов», я думаю, что они должны явно сказать это
В приведенном выше отрывке он ссылается на «строки». Я нашел четыре определения со строкой в их названии: «Пустая строка», «Показать строку», «Неполная строка» и «Строка». Должен ли я сделать вывод, что они означают «Строка» из-за пропуска слов «Пусто», «Показать» и «Неполный» - или все четыре из этих определений включительно считаются строкой в приведенном выше отрывке?
Все вопросы, которые возникают после этого блока текста, зависят от вывода, что «символы» означают «один или несколько символов»:
- Можно ли с уверенностью заключить, что если файл пустой, это не текстовый файл, поскольку он не содержит один или несколько символов?
Все вопросы, которые возникают после этого блока текста, зависят от того, что в приведенном выше фрагменте строка определена как «Строка», и что три других определения, содержащие «Строку» в их названии, должны быть исключены:
Означает ли «ноль» в «нуле или более строках», что файл все еще можно считать текстовым файлом, если он содержит один или несколько символов, которые не заканчиваются символом новой строки?
Означает ли «ноль или более строк», что когда в игру вступает одна «Строка» (0 или более символов плюс завершающий символ новой строки), становится недопустимым, когда последняя строка является «Неполной строкой» (одна или несколько символы новой строки в конце файла)?
Означает ли, что «ни одна [никакая строка] не может превышать {LINE_MAX} байт в длину, включая символ новой строки», означает ли это ограничение на количество символов, допустимое для любой данной «строки» в текстовом файле (кроме этого, значение LINE_MAX в Ubuntu 18.04 и FreeBSD 11.1 - это "2048")?