Aula 16: File Descriptors — open, read, write
Todo arquivo, pipe, socket e dispositivo que um programa acessa no Linux é representado como um file descriptor — um número inteiro pequeno que aponta para uma entrada na tabela de arquivos do processo. As chamadas open, read, write, close e lseek são os primitivos mais fundamentais de I/O do POSIX.
Um file descriptor é como o número de uma mesa em um restaurante: você não precisa lembrar o endereço da cozinha — só diz o número, e o SO sabe exatamente a qual arquivo você está se referindo.
- file descriptor
- Um número inteiro pequeno e não negativo que identifica um arquivo aberto dentro de um processo. stdin=0, stdout=1, stderr=2. open() retorna o menor FD disponível.
- open
- Chamada de sistema que abre um arquivo e retorna um file descriptor. Recebe um caminho, flags (O_RDONLY, O_WRONLY, O_CREAT, O_TRUNC) e um mode para criar novos arquivos.
- read
- Chamada de sistema que lê até n bytes de um file descriptor para dentro de um buffer. Retorna o número de bytes realmente lidos, 0 no EOF, e -1 em caso de erro.
- write
- Chamada de sistema que escreve n bytes de um buffer para um file descriptor. Retorna o número de bytes realmente escritos — pode escrever menos do que o pedido.
- lseek
- Chamada de sistema que reposiciona o file offset de um descriptor. Permite leitura/escrita em posição arbitrária dentro do arquivo. SEEK_SET, SEEK_CUR, SEEK_END são valores de whence.