Exercícios — File Descriptors em C

Exercício 1

Considere o código:

int fd = open("dados.txt", O_RDONLY);

O que representa a variável fd?


Exercício 2

Quais são os três file descriptors padrão existentes em sistemas UNIX/Linux?

Indique o número e a função de cada um.


Exercício 3

Explique porque o valor devolvido por open() deve ser sempre verificado.


Exercício 4

O que acontece se esquecermos de usar close(fd) após abrir um ficheiro?


Exercício 5

Complete o código para abrir um ficheiro apenas para leitura:

int fd = open("notas.txt", ____________);

Exercício 6

Complete o código para fechar corretamente um ficheiro:

____________(fd);

Exercício 7

Indique se é Verdadeiro ou Falso:

  1. stdin corresponde ao file descriptor 0

  2. stdout corresponde ao file descriptor 2

  3. stderr corresponde ao file descriptor 2

  4. open() devolve um file descriptor

  5. read() pode funcionar sem file descriptor


Exercício 8

Observe o código:

int fd = open("teste.txt", O_WRONLY);
write(fd, "ABC", 3);

Explique o que este programa faz.


Exercício 9

Explique a diferença entre:

  • nome do ficheiro

  • file descriptor


Exercício 10

Porque normalmente o primeiro ficheiro aberto por um programa recebe o valor 3 como file descriptor?


Exercício 11

Escreva um pequeno programa em C que:

  • abra um ficheiro chamado exemplo.txt

  • verifique se houve erro

  • feche o ficheiro corretamente


Exercício Extra — Interpretação

Considere:

int fd1 = open("a.txt", O_RDONLY);
int fd2 = open("b.txt", O_RDONLY);

Responda:

  1. fd1 e fd2 terão obrigatoriamente o mesmo valor?

  2. Porque razão?

  3. Qual será normalmente o valor de fd1?