Entradas e saidas
Engenharias
Sistemas Operativos
Entradas & Saídas
1. Instruções de entrada e Saída
(a) Implemente um programa em C que, utilizando a função write, escreva a mensagem "Hello, world !" na saída. Qual a diferença entre a função write e a função printf?
#include /* Livraria para funções de Input/Output. */ int main()
{
/* o descritor 1 e' o stdout */ write (1, "Hello, world !\n", 15); return 0;
}
(b) Modifique o programa anterior por forma a que a mensagem seja escrita num ficheiro chamado "mensagem".
2. Redireccionamento de Entradas/Saídas
No programa anterior, substitua write por printf e efectue outras alterações que considere necessárias, para que a mensagem continue a ser escrita no ficheiro.
Deve utilizar a primitiva dup2 para efectuar redirecção da saída.
Universidade da Madeira
Pag. 1
Departamento de Matemática e Engenharias
Departamento de Matemática e
Engenharias
Sistemas Operativos
Processos
1. Processos (fork,exec)
(a) Neste exercício pretende-se ilustrar o funcionamento da primitiva fork, que permite criar um novo processo (filho) a partir de um processo existente (pai).
i. Copie o ficheiro fork.c. ii. Observe e compreenda o conteúdo do ficheiro fork.c. Compile e execute o programa. iii. Explique o facto da variável x assumir valores diferentes no processo pai e no processo filho. iv. Faça debug dos processos pai e filho. O procedimento é o seguinte:
A. Vão ser necessárias 3 sessões abertas no servidor. Uma para correr o debugger no processo pai. Outra para correr o debugger no processo filho. E a terceira para enviar os sinais necessários para os processos continuarem a execução. B. Colocar a primitiva pause() no processo filho. Isto permite que o processo filho fique bloqueado à espera de um sinal para continuar. Sugere-se que seja colocada após o processo filho ter imprimido no écran o seu pid.
C. Crie uma função de tratamento de uma excepção e use a primitiva signal