1 /* ... */
2 int main(void)
3 {
4 int fd;
5 struct stat sbuf;
6 umask(S_IXGRP|S_IWOTH|S_IXOTH);
7 if (creat("filex",S_IRWXU|S_IRWXG)<0) err_sys("creat error");
8 if (stat("filex",&sbuf)<0) err_sys("stat error");
9 if (chmod("filex",(sbuf.st_mode & ~S_IWGRP)|S_IROTH)<0) err_sys("stat error");
10 exit(0);
11 }
1.1 Diga quais as permissões que ficam associadas ao ficheiro filex e justifique a sua resposta.
1.2 Diga qual o efeito de estabelecer nas permissões do ficheiro na linha 7 do programa o bit S_ISGID (`set group ID on execution').
2 (2.5) As chamadas às funções da biblioteca standard de entrada/saída tratam da bufferização dos dados aquando da transferência para o kernel usando buffers de tamanho ideal.
2.1 Diga qual é o tamanho ideal do buffer e justifique a sua resposta.
2.2 Diga que tipos de `bufferização' podem ser mantidos pela biblioteca standard de entrada/saída e em que consistem. Dê exemplos de ficheiros que, por omissãom, usam cada um deles.
3 (2.5) Sinais são interrupções de software relacionadas com acontecimentos assíncronos.
3.1 Diga que tipos de disposições (ou acções associadas) podem ser estabelecidas para sinais e em que consistem.
3.2 Diga como pode conseguir enviar para o stdout a mensagem "alarm on." sempre que um processo recebe o sinal SIG_ALARM.
4 (2.5)
4.1 Escreva um programa em C que estabeleça um canal de comunicação entre um processo pai e um processo filho; o filho envia para o pai a cadeia de caracteres "The quick brown fox jumps over the lazy dog" e o pai envia-a para o stdout. Deve ter o cuidado de fechar os lados da pipe que não são usados pelos processos.
4.2 Diga o que acontece quando um processo lê de uma pipe com read() e não há nenhum processo com o lado de escrita aberto para essa pipe. E se um processo tentar escrever para uma pipe com write() e não há nenhum processo com o lado de leitura aberto para essa pipe?
(Total: 10.0/20.0)
JCL