Departamento de Engenharia Electrotécnica e de Computadores
Sistemas Informáticos
Teste, 19 de Junho de 1995
II Parte
DURAÇÃO MÁXIMA: 60 minutos Com consulta

1 Considere o Kernel de um sistema UNIX.

a. Qual é o efeito das chamadas link() e unlink()? Após chamadas ao Kernel, em que condições um ficheiro pode ser destruído?

b. Para que se usa a chamada readlink() e porque não pode usar read() para o mesmo efeito?

2 Considere a seguinte situação em termos de estruturas de gestão de ficheiros:

a. Quais as chamadas ao Kernel que alteram o valor de "current file offset" ?

b. Complete o diagrama da figura anterior com os efeitos da execução do seguinte fragmento de programa:

1 fd= open("fx",O_RDWR|O_APPEND);

2 close(STDIN_FILENO);

3 dup(fd);

4 close(fd);

3 Considere o seguinte fragmento de programa:

1 static void sig_alrm(int signo) {

2 return;

3 }

4 signal(SIG_ALRM,sig_alrm);

5 alarm(10);

6 pause();

7 alarm(0)

a. Descreva os objectivos deste fragmento de programa.

b. Identifique potenciais problemas com este programa e proponha soluções.

4

a. Descreva todos os passos necessários à criação de uma fila de mensagens num programa em C. Como pode enviar mensagens para a fila?

b. O que acontece quando um processo tenta enviar uma mensagem para a fila e esta está cheia?

NB! No código apresentado, para simplificar, não são testadas eventuais condições de erro.