Programas Userland sob Unixes mais antigos não viram bytes "pad" no final de um arquivo. Eu sei que o MS-DOS ou CP / M preencheria blocos de disco com caracteres Ctrl-Z, portanto, não apenas um algoritmo de leitura de arquivos precisava verificar os blocos de fim de disco, mas também verificar os bytes de preenchimento. / p>
Unixes nunca fizeram esse tipo de coisa. Programas leem bytes até que a condição de fim de arquivo aconteça, que para a chamada de sistema read(2)
significa retornar 0. Infelizmente, uma chamada de sistema de longa execução pode ser interrompida, o que faz com que read()
retorne o código de erro (-1) , e o símbolo global errno
é avaliado como EINTR, então os Unixes também introduzem, de maneira tradicional, algum disfarce na leitura de certos dispositivos.
Há também um aspecto de sistema de arquivos para tudo isso: sistemas de arquivos Unix colocariam dados em blocos de disco e manteriam um valor de tamanho de arquivo em bytes no inode. Alguns outros sistemas operacionais mantinham apenas o tamanho do arquivo em blocos. Se os dados fossem menores que um bloco, o problema borbulhava na terra do usuário, com bytes de preenchimento ou outras bobagens.