Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Arruma um bug na leitura da entrada #2

Open
wants to merge 30 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
30 commits
Select commit Hold shift + click to select a range
8bb3034
Arrumei um bug que pegava lixo na entrada
Lobosque Nov 13, 2011
a3f1f07
Pequeno conserto no prompt do shell
Lobosque Nov 13, 2011
4d420de
Adicionado redirecionamento de entrada e saida. Funciona em todos os …
Lobosque Nov 13, 2011
0f8bffc
Adicionado suporte a append (>>).
Lobosque Nov 13, 2011
b4f593d
Comando builtin echo adicionado.
Lobosque Nov 13, 2011
605dd94
Adicionado comando builtin about.
Lobosque Nov 13, 2011
1c91702
Comando history melhorado, agora aceita um argumento com o maximo de …
Lobosque Nov 13, 2011
effc89f
Pequeno erro no echo quando sem argumentos. (Quebra de linha desneces…
Lobosque Nov 13, 2011
33236df
Possíveis problemas de concorrencia e bug no ctrl+z.
Lobosque Nov 14, 2011
277c07d
Adicionado a fila que guardara os comandos (para podermos tratar caso…
Lobosque Nov 14, 2011
d106525
Parser reconhece pipe.
Lobosque Nov 14, 2011
fb165cf
Melhoras no tratamento de concorrência.
Lobosque Nov 14, 2011
8400360
Pipe funcionando. Falta melhorar.
Lobosque Nov 15, 2011
3069961
Removendo arquivos não usados.
Lobosque Nov 15, 2011
54beef2
Uso de grupos para tratar melhor concorrência.
Lobosque Nov 15, 2011
50d6510
Alguns memory leaks removidos.
Lobosque Nov 15, 2011
c2069a0
Algumas variáveis inúteis removidas.
Lobosque Nov 15, 2011
710f7d5
Pipe melhorado.
Lobosque Nov 15, 2011
7a8d541
Parser melhorado.
Lobosque Nov 15, 2011
b34f6e8
Pequenos melhoramentos no gerenciamento da memória.
Lobosque Nov 15, 2011
1587049
Mais otimização de memória.
Lobosque Nov 15, 2011
acc3c59
Código mais modularizado e melhoramentos em fg, bg, e ctrl+z (stop).
Lobosque Nov 16, 2011
d4b5836
Mais melhoras na modularização e remoção de algumas variáveis não uti…
Lobosque Nov 16, 2011
573d154
Comandos bultion agora aceitam redirecionamento de saída.
Lobosque Nov 16, 2011
a609f51
Pequena otimização no pipe.
Lobosque Nov 16, 2011
95d8634
Formatação.
Lobosque Nov 16, 2011
18944c1
Versão final com documentação.
Lobosque Nov 16, 2011
f270487
Adicionado arquivos empty.
Lobosque Nov 16, 2011
35a2c51
Removendo arquivos de backup que foram colocados sem querer.
Lobosque Nov 16, 2011
448f64d
Removendo backup do readme.
Lobosque Nov 16, 2011
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
280 changes: 280 additions & 0 deletions Doxyfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,280 @@
# Doxyfile 1.7.4

#---------------------------------------------------------------------------
# Project related configuration options
#---------------------------------------------------------------------------
DOXYFILE_ENCODING = UTF-8
PROJECT_NAME = Shell
PROJECT_NUMBER =
PROJECT_BRIEF =
PROJECT_LOGO =
OUTPUT_DIRECTORY = docs
CREATE_SUBDIRS = YES
OUTPUT_LANGUAGE = Portuguese
BRIEF_MEMBER_DESC = YES
REPEAT_BRIEF = YES
ABBREVIATE_BRIEF =
ALWAYS_DETAILED_SEC = NO
INLINE_INHERITED_MEMB = NO
FULL_PATH_NAMES = YES
STRIP_FROM_PATH =
STRIP_FROM_INC_PATH =
SHORT_NAMES = NO
JAVADOC_AUTOBRIEF = NO
QT_AUTOBRIEF = NO
MULTILINE_CPP_IS_BRIEF = NO
INHERIT_DOCS = YES
SEPARATE_MEMBER_PAGES = NO
TAB_SIZE = 8
ALIASES =
OPTIMIZE_OUTPUT_FOR_C = YES
OPTIMIZE_OUTPUT_JAVA = NO
OPTIMIZE_FOR_FORTRAN = NO
OPTIMIZE_OUTPUT_VHDL = NO
EXTENSION_MAPPING =
BUILTIN_STL_SUPPORT = NO
CPP_CLI_SUPPORT = NO
SIP_SUPPORT = NO
IDL_PROPERTY_SUPPORT = YES
DISTRIBUTE_GROUP_DOC = NO
SUBGROUPING = YES
INLINE_GROUPED_CLASSES = NO
TYPEDEF_HIDES_STRUCT = NO
SYMBOL_CACHE_SIZE = 0
#---------------------------------------------------------------------------
# Build related configuration options
#---------------------------------------------------------------------------
EXTRACT_ALL = YES
EXTRACT_PRIVATE = NO
EXTRACT_STATIC = NO
EXTRACT_LOCAL_CLASSES = YES
EXTRACT_LOCAL_METHODS = NO
EXTRACT_ANON_NSPACES = NO
HIDE_UNDOC_MEMBERS = NO
HIDE_UNDOC_CLASSES = NO
HIDE_FRIEND_COMPOUNDS = NO
HIDE_IN_BODY_DOCS = NO
INTERNAL_DOCS = NO
CASE_SENSE_NAMES = YES
HIDE_SCOPE_NAMES = NO
SHOW_INCLUDE_FILES = YES
FORCE_LOCAL_INCLUDES = NO
INLINE_INFO = YES
SORT_MEMBER_DOCS = YES
SORT_BRIEF_DOCS = NO
SORT_MEMBERS_CTORS_1ST = NO
SORT_GROUP_NAMES = NO
SORT_BY_SCOPE_NAME = NO
STRICT_PROTO_MATCHING = NO
GENERATE_TODOLIST = YES
GENERATE_TESTLIST = YES
GENERATE_BUGLIST = YES
GENERATE_DEPRECATEDLIST= YES
ENABLED_SECTIONS =
MAX_INITIALIZER_LINES = 30
SHOW_USED_FILES = YES
SHOW_DIRECTORIES = NO
SHOW_FILES = YES
SHOW_NAMESPACES = YES
FILE_VERSION_FILTER =
LAYOUT_FILE =
#---------------------------------------------------------------------------
# configuration options related to warning and progress messages
#---------------------------------------------------------------------------
QUIET = NO
WARNINGS = YES
WARN_IF_UNDOCUMENTED = YES
WARN_IF_DOC_ERROR = YES
WARN_NO_PARAMDOC = NO
WARN_FORMAT = "$file:$line: $text"
WARN_LOGFILE =
#---------------------------------------------------------------------------
# configuration options related to the input files
#---------------------------------------------------------------------------
INPUT =
INPUT_ENCODING = UTF-8
FILE_PATTERNS =
RECURSIVE = NO
EXCLUDE =
EXCLUDE_SYMLINKS = NO
EXCLUDE_PATTERNS =
EXCLUDE_SYMBOLS =
EXAMPLE_PATH =
EXAMPLE_PATTERNS =
EXAMPLE_RECURSIVE = NO
IMAGE_PATH =
INPUT_FILTER =
FILTER_PATTERNS =
FILTER_SOURCE_FILES = NO
FILTER_SOURCE_PATTERNS =
#---------------------------------------------------------------------------
# configuration options related to source browsing
#---------------------------------------------------------------------------
SOURCE_BROWSER = NO
INLINE_SOURCES = NO
STRIP_CODE_COMMENTS = YES
REFERENCED_BY_RELATION = NO
REFERENCES_RELATION = NO
REFERENCES_LINK_SOURCE = YES
USE_HTAGS = NO
VERBATIM_HEADERS = YES
#---------------------------------------------------------------------------
# configuration options related to the alphabetical class index
#---------------------------------------------------------------------------
ALPHABETICAL_INDEX = YES
COLS_IN_ALPHA_INDEX = 5
IGNORE_PREFIX =
#---------------------------------------------------------------------------
# configuration options related to the HTML output
#---------------------------------------------------------------------------
GENERATE_HTML = YES
HTML_OUTPUT = html
HTML_FILE_EXTENSION = .html
HTML_HEADER =
HTML_FOOTER =
HTML_STYLESHEET =
HTML_EXTRA_FILES =
HTML_COLORSTYLE_HUE = 220
HTML_COLORSTYLE_SAT = 100
HTML_COLORSTYLE_GAMMA = 80
HTML_TIMESTAMP = YES
HTML_ALIGN_MEMBERS = YES
HTML_DYNAMIC_SECTIONS = NO
GENERATE_DOCSET = NO
DOCSET_FEEDNAME = "Doxygen generated docs"
DOCSET_BUNDLE_ID = org.doxygen.Project
DOCSET_PUBLISHER_ID = org.doxygen.Publisher
DOCSET_PUBLISHER_NAME = Publisher
GENERATE_HTMLHELP = NO
CHM_FILE =
HHC_LOCATION =
GENERATE_CHI = NO
CHM_INDEX_ENCODING =
BINARY_TOC = NO
TOC_EXPAND = NO
GENERATE_QHP = NO
QCH_FILE =
QHP_NAMESPACE = org.doxygen.Project
QHP_VIRTUAL_FOLDER = doc
QHP_CUST_FILTER_NAME =
QHP_CUST_FILTER_ATTRS =
QHP_SECT_FILTER_ATTRS =
QHG_LOCATION =
GENERATE_ECLIPSEHELP = NO
ECLIPSE_DOC_ID = org.doxygen.Project
DISABLE_INDEX = NO
ENUM_VALUES_PER_LINE = 4
GENERATE_TREEVIEW = NO
USE_INLINE_TREES = NO
TREEVIEW_WIDTH = 250
EXT_LINKS_IN_WINDOW = NO
FORMULA_FONTSIZE = 10
FORMULA_TRANSPARENT = YES
USE_MATHJAX = NO
MATHJAX_RELPATH = http://www.mathjax.org/mathjax
SEARCHENGINE = YES
SERVER_BASED_SEARCH = NO
#---------------------------------------------------------------------------
# configuration options related to the LaTeX output
#---------------------------------------------------------------------------
GENERATE_LATEX = YES
LATEX_OUTPUT = latex
LATEX_CMD_NAME = latex
MAKEINDEX_CMD_NAME = makeindex
COMPACT_LATEX = NO
PAPER_TYPE = a4
EXTRA_PACKAGES =
LATEX_HEADER =
LATEX_FOOTER =
PDF_HYPERLINKS = YES
USE_PDFLATEX = YES
LATEX_BATCHMODE = NO
LATEX_HIDE_INDICES = NO
LATEX_SOURCE_CODE = NO
#---------------------------------------------------------------------------
# configuration options related to the RTF output
#---------------------------------------------------------------------------
GENERATE_RTF = NO
RTF_OUTPUT = rtf
COMPACT_RTF = NO
RTF_HYPERLINKS = NO
RTF_STYLESHEET_FILE =
RTF_EXTENSIONS_FILE =
#---------------------------------------------------------------------------
# configuration options related to the man page output
#---------------------------------------------------------------------------
GENERATE_MAN = NO
MAN_OUTPUT = man
MAN_EXTENSION = .3
MAN_LINKS = NO
#---------------------------------------------------------------------------
# configuration options related to the XML output
#---------------------------------------------------------------------------
GENERATE_XML = NO
XML_OUTPUT = xml
XML_SCHEMA =
XML_DTD =
XML_PROGRAMLISTING = YES
#---------------------------------------------------------------------------
# configuration options for the AutoGen Definitions output
#---------------------------------------------------------------------------
GENERATE_AUTOGEN_DEF = NO
#---------------------------------------------------------------------------
# configuration options related to the Perl module output
#---------------------------------------------------------------------------
GENERATE_PERLMOD = NO
PERLMOD_LATEX = NO
PERLMOD_PRETTY = YES
PERLMOD_MAKEVAR_PREFIX =
#---------------------------------------------------------------------------
# Configuration options related to the preprocessor
#---------------------------------------------------------------------------
ENABLE_PREPROCESSING = YES
MACRO_EXPANSION = NO
EXPAND_ONLY_PREDEF = NO
SEARCH_INCLUDES = YES
INCLUDE_PATH =
INCLUDE_FILE_PATTERNS =
PREDEFINED =
EXPAND_AS_DEFINED =
SKIP_FUNCTION_MACROS = YES
#---------------------------------------------------------------------------
# Configuration::additions related to external references
#---------------------------------------------------------------------------
TAGFILES =
GENERATE_TAGFILE =
ALLEXTERNALS = NO
EXTERNAL_GROUPS = YES
PERL_PATH = /usr/bin/perl
#---------------------------------------------------------------------------
# Configuration options related to the dot tool
#---------------------------------------------------------------------------
CLASS_DIAGRAMS = YES
MSCGEN_PATH =
HIDE_UNDOC_RELATIONS = YES
HAVE_DOT = NO
DOT_NUM_THREADS = 0
DOT_FONTNAME = Helvetica
DOT_FONTSIZE = 10
DOT_FONTPATH =
CLASS_GRAPH = YES
COLLABORATION_GRAPH = YES
GROUP_GRAPHS = YES
UML_LOOK = NO
TEMPLATE_RELATIONS = NO
INCLUDE_GRAPH = YES
INCLUDED_BY_GRAPH = YES
CALL_GRAPH = NO
CALLER_GRAPH = NO
GRAPHICAL_HIERARCHY = YES
DIRECTORY_GRAPH = YES
DOT_IMAGE_FORMAT = png
DOT_PATH =
DOTFILE_DIRS =
MSCFILE_DIRS =
DOT_GRAPH_MAX_NODES = 50
MAX_DOT_GRAPH_DEPTH = 0
DOT_TRANSPARENT = NO
DOT_MULTI_TARGETS = YES
GENERATE_LEGEND = YES
DOT_CLEANUP = YES
42 changes: 42 additions & 0 deletions Mainpage.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
/**
* @mainpage Shell
* @author Lucas Lobosque - 6792645
* @author José Leandro Pozer - 6793222
* @date 16/11/2011
*
* @section intro Introdução
*
* @subsection estrutura_basica_subsec Estrutura básica de Arquivos
* Desenvolvemos o shell utilizando 4 arquivos diferentes (e seus headers):
*
* <ul>
* <li>main.c - Arquivo com a função main, onde fica o loop principal e com handlers de sinais como SIGINT, SIGTSTP e SIGCHLD.</li>
* <li>parser.c - Funções relacionadas a transformar a entrada do usuário em uma estrutura compreensível para o programa.</li>
* <li>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.</li>
* <li>list.c - Funções que manipulam as listas usadas pelo programa.</li>
* </ul>
*
* @subsection estrutura_dados_subsec Estrutura básica de Dados
* No nosso programa, temos três listas ligadas diferentes que são constantemente utilizadas:
* <ul>
* <li>history - Esta é a mais simples das três. Guarda strings com os comandos anteriormente utilizados pelo usuário. É usada pelo comando builtin history.</li>
* <li>childs - Nesta lista ligada armazenamos todos os processos que estão rodando ou estão interrompidos.</li>
* <li>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.</li>
* </ul>
*
* @section section_toc Características Não Implementadas (limitações).
* Na nossa shell, os seguintes tipos de comando não são possíveis:
* <ul>
* <li>Comando builtin rodando em background (sempre rodará em foreground).</li>
* <li>Redirecionamento de entrada para comandos builtin (redirecionamento de saída implementado).</li>
* <li>Pipe com comandos builtin</li>
* </ul>
* 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.
*
* @section testes 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).
* @section conclusao 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 :).
*/
14 changes: 14 additions & 0 deletions Makefile
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
shell : builtin.o main.o list.o parser.o
gcc obj/builtin.o obj/main.o obj/list.o obj/parser.o -o bin/shell

builtin.o : builtin.c
gcc -c builtin.c -o obj/builtin.o

main.o : main.c
gcc -c main.c -o obj/main.o

list.o : list.c
gcc -c list.c -o obj/list.o

parser.o : parser.c
gcc -c parser.c -o obj/parser.o
56 changes: 56 additions & 0 deletions README
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
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 :).

Empty file added bin/empty
Empty file.
Loading