Por que abrir arquivo para acesso binário é “sem sentido” no Unix, nem o “+” para leitura / gravação?

1

Estou lendo a linguagem de programação C (2ª edição). Na página 157 e 158, o autor fornece um trecho de código de fopen no sistema Unix. No final do snippet, o autor adicionou:

In particular, our fopen does not recognize the "b" that signals binary access, since that is meaningless on UNIX systems, nor the "+" that permits both reading and writing.

Por que o autor diz que não tem sentido? (O "b" e "+" mencionados aqui são modos de acesso a arquivos)

    
por Chuyang Liu 13.03.2018 / 15:01

2 respostas

8

Alguns sistemas não-Unix tratam arquivos binários e de texto de diferentes maneiras. Por exemplo, em DOS, Windows e OS / 2 (que não seriam relevantes quando fopen foi projetado, mas servem como exemplos úteis), abrir um arquivo no modo de texto e gravar nele terminará os terminais de linha de “C” convenção ( \n ) para o que a plataforma exigir. Em outros sistemas, abrir um arquivo no modo binário fará com que seja processado em registros. Isso é o que o sinalizador “b” de fopen controla: arquivos abertos sem ele são abertos no modo de texto, os arquivos abertos com ele são abertos no modo binário. Como os sistemas no estilo Unix não têm essa distinção, "b" é ignorado (e não causa um erro).

Minha cópia do livro não menciona "+", mas estou supondo que fopen não o apoiava ( faz agora ).

    
por 13.03.2018 / 15:14
4

De acordo com a especificação POSIX de fopen() (que não existia quando livro foi escrito):

The character b shall have no effect, but is allowed for ISO C standard conformance.

O modo b deve ser aceito, mas não tem efeito em um sistema POSIX.

Além disso, o modo + :

When a file is opened with update mode (+ as the second or third character in the mode argument), both input and output may be performed on the associated stream.

Isso definitivamente tem efeito mesmo em um sistema POSIX.

Observe que a linguagem de programação C mudou um pouco desde que o livro K & R foi escrito.

    
por 13.03.2018 / 15:15