forked from leandropozer/shell
-
Notifications
You must be signed in to change notification settings - Fork 0
Lobosque/shell
Folders and files
Name | Name | Last commit message | Last commit date | |
---|---|---|---|---|
Repository files navigation
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 :).
About
shell do linux
Resources
Stars
Watchers
Forks
Releases
No releases published
Packages 0
No packages published
Languages
- C 57.4%
- JavaScript 38.2%
- Perl 4.4%