Exercicio de programaçao em Llinguagem C
Busco professor de Programação
1. EXERCICIO:
Escreva um programa em linguagem C padrão, de nome gsn.c, que gera e ordena uma lista de n bytes aleatórios e imprime a lista em decimal na saída padrão. Para efetuar este processamento, o programa deve utilizar a metodologia “original” que a seguir se descreve.
- O número de bytes n da lista é o único argumento do programa na linha de comandos.
- O programa deve testar se o número de argumentos dado na linha de comandos é correto e se n 0. Em caso de erro deve emitir uma mensagem e terminar.
- O programa gsn (processo A) executa a sua tarefa em 3 passos distintos criando 3 novos processos denominados B, C e D, um de cada vez, com recurso à função de sistema fork() e substituindo a sua imagem respetivamente pela dos comandos head, hexdump e sort (usualmente localizados na diretoria /bin). Os 3 passos são equivalentes à execução dos seguintes 3 comandos na linha de comandos (shell):
$ head -c NNN /dev/urandom tmp.bin # Passo 1
$ hexdump -v -e "/1 \"%d\\n\"" tmp.bin tmp.txt
# Passo 2
$ sort -g tmp.txt # Passo 3
onde $ representa a prompt da linha de commandos, # representa um comentário, é o operador de redireção da saída padrão (stdout). O operador redireciona e cria um ficheiro. O operador redireciona a entrada padrão (stdin).
- O comando head lista os primeiros NNN bytes do ficheiro especial /dev/urandom gerador de bytes aleatórios para o ficheiro tmp.bin. O comando hexdump lista em decimal os bytes do ficheiro tmp.bin para o ficheiro tmp.txt. Finalmente, o comando sort ordena os números (linhas) de tmp.txt segundo um critério numérico.
- Tenha em conta que a string de formatação do comando head, quer para a shell quer em linguagem C, deve ser escrita como "/1 \"%d\\n\"" devido ao significado especial dos carateres " e \ no interior da string, necessitando de ser precedidos pelo caracter \ (procedimento em inglês designado por escaped characters) para anular o seu significado especial.
- Para o passo 1, por exemplo, o programa gsn (processo A) deve gerar uma lista de bytes constituída pelo ficheiro binário "tmp.bin", criando um novo processo (processo B) que substitui a sua imagem pela do comando head e o executa com as opções "-c" e "NNN", onde NNN significa o valor de n dado como argumento ao programa. Dica: antes da substituição da imagem, redirecionar a saída padrão stdout para o ficheiro "tmp.bin" usando a função de biblioteca
Contate sem compromisso