mirror of
https://gitlab.com/blau_araujo/cblc.git
synced 2025-05-09 18:16:37 -03:00
exercícios da aula 15
This commit is contained in:
parent
ffb3061b84
commit
2fc358accd
1 changed files with 93 additions and 0 deletions
93
exercicios/15/README.org
Normal file
93
exercicios/15/README.org
Normal file
|
@ -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.
|
||||
|
Loading…
Add table
Reference in a new issue