forked from leandropozer/shell
-
Notifications
You must be signed in to change notification settings - Fork 0
/
README
56 lines (35 loc) · 2.68 KB
/
README
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
Autores:
Lucas Lobosque - 6792645
José Leandro Pozer - 6793222
Data:
16/11/2011
==Introdução==
--Estrutura básica de Arquivos--
Desenvolvemos o shell utilizando 4 arquivos diferentes (e seus headers):
* main.c - Arquivo com a função main, onde fica o loop principal e com handlers de sinais como SIGINT, SIGTSTP e SIGCHLD.
* parser.c - Funções relacionadas a transformar a entrada do usuário em uma estrutura compreensível para o programa.
* builtin.c - Aqui estáo todos os comandos builtin e também uma função que checa se um dado comando é builtin ou não.
* list.c - Funções que manipulam as listas usadas pelo programa.
--Estrutura básica de Dados--
No nosso programa, temos três listas ligadas diferentes que são constantemente utilizadas:
* history - Esta é a mais simples das três. Guarda strings com os comandos anteriormente utilizados pelo usuário. É usada
pelo comando builtin history.
* childs - Nesta lista ligada armazenamos todos os processos que estão rodando ou estão interrompidos.
* cmdList - Lista responsável por guardar o último comando enviado pelo usuário. Nesta lista, o comando é guardado depois de
"parseado", então todas suas informações são guardadas aqui (roda no background? tem redirecionamento de saída?
pra onde?). Cada item da lista é um comando diferente, sendo que a lista e sempre resetada no loop. Ou seja,
esta lista só conterá mais de um item se houver pipe no comando.
==Características Não Implementadas (limitações)==
Na nossa shell, os seguintes tipos de comando não são possíveis:
* Comando builtin rodando em background (sempre rodará em foreground).
* Redirecionamento de entrada para comandos builtin (redirecionamento de saída implementado).
* Pipe com comandos builtin
Tornou-se uma tarefa complicada para nós lidar com essas peculiaridades de comandos builtin, já que implementamos sem elas em mente, e,
quando percebemos que haveriam essas possibilidades, teríamos que mudar muito a estrutura do programa.
==Testes==
Além de exaustivos testes com vários comandos complexos, rodamos nossa shell com o Valgrind e encontramos vários memory leaks (a maioria causada
por erros bobos, porém alguns eram bem complexos). Arrumamos a maioria deles, mas infelizmente teve um leak que não foi possível concertar, pois
ele é causado pela função getlogin(), (implementada na unistd.h).
==Conclusão==
Além de bastante desafiador, o desenvolvimento da shell foi de grande valia para nós, já que nunca tivemos um contato a nível de sistema com
o Linux. Depois do desenvolvimento desse programa, arriscamos dizer que entendemos ao menos um pouco de Linux :).