diff --git a/exercicios/15/README.org b/exercicios/15/README.org new file mode 100644 index 0000000..78656e5 --- /dev/null +++ b/exercicios/15/README.org @@ -0,0 +1,93 @@ +#+title: Curso Básico da Linguagem C +#+subtitle: Exercícios +#+author: Blau Araujo +#+startup: show2levels +#+options: toc:3 + +* Exercícios da aula 15: Abertura de arquivos para escrita + +- [[../../aulas/14-wfiles/README.org][Anotações da aula]] +- [[https://youtu.be/vL8vy3krcKc][Vídeo]] + +** 1. Programa 'nf' (new file) + +No Unix e no GNU, é comum as pessoas associarem a criação de novos arquivos +vazios ao utilitário =touch=, mas isso é só um efeito colateral de seu verdadeiro +propósito, que é alterar a data/hora de último acesso ao arquivo. Sendo assim, +crie um programa realmente dedicado a criar novos arquivos vazios. + +Uso proposto: + +#+begin_example +nf ARQUIVOS... +#+end_example + +Notas: + +- Os caminhos e nomes dos novos arquivos devem ser passados como argumentos. +- Se nenhum argumento for passado, o programa terminará com erro, imprimindo + suas informações de uso. +- Se algum dos arquivos já existir, o programa não fará nada com ele e apenas + exibirá uma mensagem em =stderr= com o seguinte formato: + +#+begin_example +Arquivo NOME já existe: nada será feito! +#+end_example + +- Para cada caminho inexistente, o programa deve exibir em =stderr=: + +#+begin_example +O diretório DIR não existe: impossível criar ARQUIVO! +#+end_example + +- Se algum arquivo não puder ser criado por falta de privilégios do usuário, + a mensagem de erro deve ser: + +#+begin_example +Impossível criar ARQUIVO: acesso negado! +#+end_example + +- Mesmo que algum arquivo já exista, os demais devem ser criados normalmente. +- Ao terminar, o programa deve exibir em =stdout= a quantidade de arquivos criados + no seguinte formato: + +#+begin_example +Arquivos criados: NUM_ARQUIVOS_CRIADOS de NUM_DE_ARQUIVOS_SOLICITADOS +#+end_example + +** 2. Programa 'hd' (here doc) + +No shell do Unix e do GNU, é possível criar novos arquivos digitando seus +conteúdos com o mecanismo do /here doc/: + +#+begin_example +:~$ cat << FIM >> ARQUIVO +#+end_example + +Assim, o utilitário =cat= lê as linhas digitadas, imprime essas linhas e o shell +as redireciona para /append/ em =ARQUIVO=. Portanto, crie um programa que reproduza +este comportamento de forma autônoma, ou seja, sem operadores do shell. + +Uso proposto: + +#+begin_example +hd ARQUIVO +#+end_example + +Requisitos: + +- Apenas o primeiro argumento será aceito como o caminho e o nome do arquivo que + receberá as linhas digitadas no terminal. +- O programa deve avisar ao usuário se o arquivo já existir, dando a opção de + continuar com o seguinte prompt: + +#+begin_example +O arquivo ARQUIVO já existe, deseja modifícá-lo (s/N)? +#+end_example + +- A opção padrão, aceita com =Enter=, é =N= (não). +- Se o usuário aceitar continuar, as novas linhas devem ser escritas ao final + do arquivo. +- O programa vai parar de receber novas linhas quando o usuário teclar =Ctrl+D=. +- Antes de terminar, o programa deve exibir o conteúdo atual do arquivo. +