В Linux нет флагов O_BINARY и O_TEXT?

При использовании системного уровня ввода-вывода в Linux я заметил, что компилятор распознал флаги O_RDONLY и O_RDWR , но он не имел никакого представления о значении флагов O_BINARY и O_TEXT .

Это дело Linux?

Linux, и почти каждый вкус Unix, если неважно, не различает двоичные и текстовые файлы. Таким образом, нет стандартных констант с этим именем. Вы можете вручную определить константы в ноль в Linux, если вы хотите включить их в свой код для удобства переноски.

http://unix.derkeiler.com/Newsgroups/comp.unix.programmer/2007-03/msg00147.html

На уровне языка C и его стандартной библиотеки нет таких флагов, как O_BINARY и O_TEXT . Бинарный или текстовый режим выбирается путем добавления спецификатора b параметра режима функции fopen . Сам спецификатор, конечно же, поддерживается всеми реализациями C, но на платформах POSIX этот спецификатор не имеет никакого эффекта: по спецификации POSIX текстовый режим такой же, как в двоичном режиме.

Не удивительно, если вы углубитесь в уровень нестандартных функций Unix I / O для конкретной платформы, вы обнаружите, что они не знают об этом различии текста и двоичного кода.

Это вещь * nix. * Операционные системы nix не выполняют автоматическое преобразование строк для ввода-вывода в текстовых файлах, поэтому флаги O_TEXT и O_BINARY не имеют смысла.

На уровне ОС между двоичным и текстовым файлом в Unix нет разницы. Текстовый файл имеет ограниченный контент. Это также верно для Windows, но соглашения, используемые C для конца строк, такие же, как и для Unix, в то время как Windows использует пару CR / LF (и явный конец маркера файла в некоторых контекстах, но обработка это было непротиворечиво даже в системных программах в последний раз, когда я проверял), поэтому для соблюдения конвенций, санкционированных С.

Windows использует \ r \ n для окончаний строк, Linux (и другие Unix-alikes) используют только \ n. В Windows чтение O_BINARY дает вам необработанные данные, возможно, нечетные окончания строк и все, тогда как O_TEXT нормализует окончание строки, поэтому ваш код C видит только один символ.

В Linux и др. Нет никакого различия между текстом и двоичным кодом, поскольку данные имеют только один символ, поэтому флаги не нужны.