Подтвердить что ты не робот

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

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

Это ли это Linux?

4b9b3361

Ответ 1

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

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

Ответ 2

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

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

Ответ 3

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

Ответ 4

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

Ответ 5

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

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