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.