From a11d1c9c759d6f7ddc65579e42335b6b2a9d2204 Mon Sep 17 00:00:00 2001 From: Blau Araujo Date: Mon, 5 May 2025 11:21:38 -0300 Subject: [PATCH] =?UTF-8?q?exerc=C3=ADcios=20da=20aula=2014?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- exercicios/14/README.org | 69 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 69 insertions(+) create mode 100644 exercicios/14/README.org diff --git a/exercicios/14/README.org b/exercicios/14/README.org new file mode 100644 index 0000000..4238dcb --- /dev/null +++ b/exercicios/14/README.org @@ -0,0 +1,69 @@ +#+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, na AT&T, 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