Нет флагов O_BINARY и O_TEXT в Linux? - PullRequest
23 голосов
/ 15 февраля 2010

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

Это вещь Linux?

Ответы [ 5 ]

25 голосов
/ 15 февраля 2010

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

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

2 голосов
/ 15 февраля 2010

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

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

1 голос
/ 15 февраля 2010

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

0 голосов
/ 15 февраля 2010

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

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

0 голосов
/ 15 февраля 2010

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...