2025-05-05 11:21:38 -03:00
|
|
|
#+title: Curso Básico da Linguagem C
|
|
|
|
#+subtitle: Exercícios
|
|
|
|
#+author: Blau Araujo
|
|
|
|
#+startup: show2levels
|
|
|
|
#+options: toc:3
|
|
|
|
|
|
|
|
* Exercícios da aula 14: Abertura de arquivos para leitura
|
|
|
|
|
|
|
|
- [[../../aulas/14-rfiles/README.org][Anotações da aula]]
|
|
|
|
- [[https://www.youtube.com/watch?v=uh3UdYyzXRM][Vídeo]]
|
|
|
|
|
|
|
|
** O arquivo =/etc/passwd=
|
|
|
|
|
|
|
|
Cada linha do arquivo =/etc/passwd= representa um usuário do sistema e tem o
|
|
|
|
seguinte formato:
|
|
|
|
|
|
|
|
#+begin_example
|
|
|
|
nome:senha:uid:gid:gecos:home:shell
|
|
|
|
#+end_example
|
|
|
|
|
|
|
|
#+begin_quote
|
|
|
|
O termo /GECOS/ vem de /General Electric Comprehensive Operating Supervisor/, e era
|
|
|
|
o nome de um antigo sistema operacional do início dos anos 1960. Como as primeiras
|
2025-05-05 11:23:51 -03:00
|
|
|
versões do Unix precisavam interagir com o ambiente GECOS, o campo foi introduzido
|
|
|
|
em =/etc/passwd= para receber informações de contato do usuário em um formato compatível
|
|
|
|
(nome completo, sala, ramal, etc).
|
2025-05-05 11:21:38 -03:00
|
|
|
#+end_quote
|
|
|
|
|
|
|
|
Exemplo:
|
|
|
|
|
|
|
|
#+begin_example
|
|
|
|
blau:x:1000:1000:Blau Araujo:/home/blau:/bin/bash
|
|
|
|
#+end_example
|
|
|
|
|
|
|
|
Com base nisso...
|
|
|
|
|
|
|
|
*** 1. Impressão do conteúdo do arquivo
|
|
|
|
|
|
|
|
Abra =/etc/passwd= para leitura e imprima todo seu conteúdo, linha por linha.
|
|
|
|
|
|
|
|
*** 2. Número de usuários
|
|
|
|
|
|
|
|
Leia o arquivo e imprima a quantidade total de usuários no seu sistema.
|
|
|
|
|
|
|
|
*** 3. Busca de usuários
|
|
|
|
|
|
|
|
Tendo o nome de um usuário como argumento (por exemplo, =root=), imprima
|
|
|
|
apenas a linha de =/etc/passwd= correspondente.
|
|
|
|
|
|
|
|
#+begin_quote
|
|
|
|
Dica: utilize funções como =strstr= ou =strncmp= para encontrar strings nas linhas,
|
|
|
|
mas cuidado com os /falsos positivos/!
|
|
|
|
#+end_quote
|
|
|
|
|
|
|
|
*** 4. Informações de usuários
|
|
|
|
|
|
|
|
Tendo um nome de usuário como argumento, imprima seus dados no formato:
|
|
|
|
|
|
|
|
#+begin_example
|
|
|
|
Login : ...
|
|
|
|
GECOS : ...
|
|
|
|
Diretório home: ...
|
|
|
|
Shell padrão : ...
|
|
|
|
#+end_example
|
|
|
|
|
|
|
|
#+begin_quote
|
|
|
|
Dica: a função =strtok= pode ser uma ótima opção para separar a linha em
|
|
|
|
campos, mas não é a única opção.
|
|
|
|
#+end_quote
|