Não há caracteres de fim de arquivo nos sistemas de arquivos Unix ou Linux. A chamada do sistema read()
retorna 0 na condição de final de arquivo, se o descritor de arquivo em uso se referir a um arquivo regular. read()
funciona de maneira diferente em soquetes e tubulações. Você não recebe um caractere especial para marcar o final do arquivo.
wc
deu 30 caracteres como contagem de caracteres ou bytes porque a primeira linha tem 12 caracteres contando o fim da linha (alimentação de linha ASCII, 0x0a numericamente), e a segunda linha tem 18, também contando a nova linha alimentação de linha).
Você pode verificar novamente a contagem de caracteres nesse caso com ls -l
e, se tiver hexdump
ou xxd
, poderá obter uma impressão hexadecimal mostrando as novas linhas de valor com valor 0x0a.
A função de biblioteca padrão C fgetc()
retorna -1 no final do arquivo, mas isso é feito no código da biblioteca, não pelo Unix (ou Linux) ou pela chamada do sistema read()
.