Programar ficheiros e diretórios
Biblioteca C, descritores POSIX, transferências parciais, linhas, metadados e caminhos.
Interfaces
| Biblioteca C | POSIX | Falha |
|---|---|---|
fopen | open | NULL / -1 |
fread, fwrite | read, write | elementos / bytes (ssize_t) |
fseek, ftell | lseek | posição do fluxo / da descrição aberta |
fclose | close | fclose descarrega buffers |
- Descritor 0 é válido: testa
fd == -1, não!fd. - Leitura curta: distingue EOF de erro com
feof/ferror. Não mistures C e POSIX na mesma abertura sem coordenar buffer e posição.
Transferências completas
write pode entregar menos bytes. Para bytes, repete write(fd, buf+feito, n-feito) e soma só o aceite; trata EINTR e progresso nulo. Se 8 bytes dão 3, continua em buf+3 com 5.
- Destino de cópia: abre sem truncar, compara
st_dev/st_inoviafstat(hard links contam), e só depois trunca. - Cada
opentem posição própria;dupe herança deforkpartilham a descrição aberta.
Posição e linhas
lseekdevolve a posição absoluta ou(off_t)-1. Para inverter bytes, visitatamanho-1até 0 comSEEK_SET; um recuo relativo apósreadrelê o mesmo byte. EOF é retorno 0, não um byte.getline(POSIX) reserva ou aumenta o buffer; inclui\nse existir. Liberta no fim;-1pode ser erro. Últimas linhas: duas passagens em ficheiro regular, fila circular em pipe.strstrcom sobreposição avança 1 byte após o início; sem ela, avança o padrão. Rejeita padrão vazio.
Metadados e tempo
- Lê
struct statsó após sucesso.statsegue links,lstatnão,fstatusa abertura.S_ISREG/S_ISDIRpara o tipo. d_namenão é caminho: junta o diretório ou usafstatat(dirfd(d), nome, &info, 0). Repõeerrno=0antes de cadareaddir.time_té civil;CLOCK_MONOTONICmede durações.localtime: ano desde 1900, mês 0–11.