#+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
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).
#+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
