FACULDADE DE ENGENHARIA DA UNIVERSIDADE DO PORTO
LICENCIATURA EM ENGENHARIA ELECTROTÉCNICA E DE COMPUTADORES
Sistemas Informáticos
Recurso, 25 de Julho de 1996
II Parte, Duração máxima 60 minutos, com consulta

1 (2.5) Considere os seguintes tipos e variáveis:

1 typedef struct { long chave; short quantidade; long preco } item;

2 item dados[6];

1.1 Diga que funções da biblioteca standard de entrada/saída usaria para escrever para ficheiro o array dados e justifique a sua resposta. A informação escrita pode ser transportada para outro UNIX noutra máquina e processada com sucesso por chamadas às mesmas funções? Porquê?

1.2 Compare o uso das chamadas à biblioteca standard de entrada/saída com o uso das chamadas directas ao Kernel (read e write) em termos de eficiência temporal e espacial e em termos de simplicidade e portabilidade dos programas.

2 (2.5) Considere o seguinte diagrama para o sistema de ficheiros em UNIX:

2.1 Diga que tipo de ficheiro é representado pelo pelo i-node 123 e pelo i-node 201. Diga qual o valor do campo st_nlink da estrutura stat para o i-node 123. Justifique todas as respostas.

2.2 Complete o diagrama apresentado com o resultado de serem executadas com sucesso as chamadas:

1 if (unlink("./file1")<0) err_sys("unlink error");

2 if ((fd= creat("./file1",S_IRUSR|S_IWUSR))<0) err_sys("creat error");

3 (2.5) Através de chamadas ao Kernel do UNIX por programas em C um processo pode alterar o seu ambiente.

3.1 Diga o que acontece quando num processo é chamada a função execl.

3.2 Os ficheiros abertos pelo processo que chama a função execl mantêm-se abertos após a chamada?

4 (2.5) Escreva um programa em C em que o processo correspondente comunica com um processo filho através de memória partilhada. O processo pai cria a secção de memória partilhada, escreve a cadeia de caracters "The quick brown fox ", espera que o filho leia e escreve outra cadeia de caracteres "jumps over the lazy dog". O processo filho escreve no stdout os caracteres recebidos.

(Total: 10.0/20.0) JCL