Diferença entre EOT e EOF

4

Eu entendo que o EOT é o código ASCII 4, enquanto o EOF é codificado como -1 (pelo menos em C). Antes de descobrir que o EOF é mapeado para -1, achei que era apenas um sinônimo para o EOT. Por que o EOF é mapeado para -1 em vez de EOT? Tanto quanto eu posso dizer, ambos fazem a mesma coisa, que é terminar um fluxo de arquivos. A única diferença que posso discernir é que o EOT também finaliza um comando no bash shell. Eu gostaria de uma descrição das diferenças técnicas precisas entre esses dois códigos.

    
por user628544 16.11.2016 / 18:05

3 respostas

4

Geralmente, o EOF não é um caractere; é a ausência de um personagem.

Se um programa é executado em um terminal no modo canônico com configurações padrão (ou seja, um programa C simples que usa apenas o stdio), ele nunca verá o caractere ASCII EOT. O driver de terminal reconhece esse caractere e cria uma condição de EOF (que, no nível baixo, é um valor de retorno 0 de read() ). A biblioteca stdio traduz essa condição EOF no valor de retorno que é apropriado para a função em questão (a macro EOF para getchar() , um ponteiro nulo para fgets() , etc.)

O valor numérico da macro EOF não é relevante em lugar nenhum, exceto na biblioteca C, e não deve influenciar sua compreensão do significado da condição EOF.

    
por 16.11.2016 / 18:22
1

EOF no contexto de C é apenas algo que não pode aparecer em um arquivo. EOT é um caractere ASCII que historicamente sinalizou o fim de uma mensagem (e é um caractere especial em terminais UNIX que significa fim de fluxo quando aparece apenas na entrada do usuário ), mas pode aparecer em arquivos, então usá-lo em C para sinalizar o final de um arquivo seria uma idéia terrível ao ler arquivos binários!

    
por 16.11.2016 / 18:16
0

EOT é um dos vários caracteres de controle usados pelos dispositivos seeriais. Há vários outros caracteres de controle relacionados à transmissão de dados em linhas seriais ou ao armazenamento de arquivos em uma fonte serial, como fita de papel. Estes incluem caracteres como SOH, STX, ETX, FS, RS, GS e US. Caracteres de controle adicionais são usados para controle de transmissão e correção de erros.

Em uma conexão serial, um caractere EOT (End Of Transmission) indica o desejo de encerrar a transmissão. Conexões seriais são geralmente acessadas usando um driver de arquivo. Quando a transmissão serial termina, o driver de arquivo relata isso como uma condição EOF (End Of File).

EOF não é um personagem. getchar () retorna um inteiro. Um caractere válido enquanto terá um valor no intervalo de 0 a 255. O valor -1 é geralmente usado como indicador falso / inválido / reprovado no Unix / Linux. (Na verdade, um valor diferente de 0, pois há vários motivos para não ter sucesso, mas geralmente apenas um caso de sucesso.) Quando getchar () retorna -1, é claro que não está retornando um caractere. No entanto, se você armazenar a saída em um byte, não conseguirá distinguir EOF do caractere DEL (Excluir).

    
por 17.11.2016 / 01:38

Tags