Folha de perguntas n. 4
7 de Junho de 1995
Nome do aluno: login:
NOTA: nas perguntas de resposta múltipla apenas serão consideradas respostas com somente uma marca, por exemplo x.
1) Considere o seguinte fragmento de um programa em C:
sigset_t set;
sigfillset(&set);
sigdelset(&set, SIGINT);
sigprocmask(SIG_BLOCK, &set, NULL);
O objectivo é que:
__ todos os sinais fiquem bloqueados se SIGINT não está na máscara actual
__ todos os sinais fiquem bloqueados excepto SIGINT
__ SIGINT fique bloqueado
__ nenhum deles
2) Para repôr a máscara de sinais com um dado valor e fazer pause() numa só operação, pode usar:
__ sigsuspend() __ sigsetjump()
__ sigprocmask() __ todas
3) Se a chamada a sigsuspend(&sigmask) terminar normalmente, a máscara de sinais passa a ser:
__ sigmask __ a anterior à chamada
__ a união da máscara anterior com sigmask __ nenhuma destas respostas
4) A chamada popen() é equivalente a chamar (com os argumentos apropriados):
__ pipe() + fork() + close() + exec() + wait()
__ pipe() + fork() + exec()
__ pipe() + fork() + close() + exec()
__ nenhuma destas respostas
5) O seguinte fragmento de um programa em C:
int fd[2]; pid_t pid;
pipe(fd);
pid= fork();
if (pid > 0) {
close(fd[1]); ...
} else {
close(fd[0]); ...
}
estabelece um canal de comunicação:
__ do processo pai para o processo pid
__ do processo pid para o processo pai
__ bidireccional entre o processo pai e o processo pid
__ nenhuma destas respostas
6) Por forma a ter um processo filho a correr comando1 e ler o seu stdout, pode usar-se:
__ popen("comando1", "w")
__ popen("comando1", "r")
__ mkfifo("comando1", O_RDONLY | O_NONBLOCK)
__ todas estas chamadas
7) Faça um esboço de uma possível implementação de signal() usando sigaction():
8) Escreva um fragmento de de um programa em C que estabelece um limite de 10 segundos para efectuar read() de uma linha do stdin
jlopes