1. O documento descreve a implementação de uma shell simples chamada MyShell em C como um trabalho prático de sistemas operacionais.
2. A MyShell implementa comandos básicos como ls, pwd, cd e também funções como execução em segundo plano e pipes.
3. A implementação inclui funções para tratar cada comando, utilizando primitivas do sistema operacional como fork, execv e wait para criar e gerenciar processos.
1. O documento descreve um trabalho prático sobre a implementação de um Tipo Abstrato de Dados (TAD) chamado TBloco para representar listas encadeadas de blocos e simular um mundo de blocos.
2. O TAD TBloco implementa funções para manipular os blocos de acordo com comandos como move, pile, entre outros.
3. O trabalho apresenta a especificação do problema, a assinatura das funções do TAD TBloco, exemplos de implementação das funções e testes realizados.
Este documento fornece uma descrição geral do programa Klavaro 1.0.8, que é um curso de digitação para ensinar a digitação por tato no teclado de computador. O documento explica o menu principal do programa, incluindo as configurações básicas de idioma e teclado, e descreve os cinco tipos principais de exercícios de digitação incluídos no programa.
O documento introduz a linguagem C, abordando conceitos como tipos de variáveis, memória, ponteiros, manipulação de arquivos e strings. O autor pretende desmistificar assuntos complexos da linguagem e fornecer exemplos práticos para o desenvolvimento de aplicações.
Otimização e Implementação dos Algoritmos de Caminhos Mínimos: Dijkstra e Floyd-Warshall.
Este trabalho obteve a primeira colocação na 1ª Competição de Caminhos Mínimos do DECOM/UFOP.
Este livro apresenta o framework Angular 2 utilizando TypeScript, Node, SystemJS e Visual Studio Code. O livro ensina os conceitos básicos de TypeScript como tipos, classes, módulos e decorators, e em seguida cobre a criação de componentes Angular, templates, serviços, formulários e comunicação com servidores.
Este documento fornece um tutorial sobre o uso da ferramenta Uppaal para modelagem e verificação de sistemas de tempo real. O tutorial introduz os conceitos básicos do Uppaal, apresenta dois casos de estudo e inclui exercícios práticos para testar a compreensão do leitor.
1. Este documento serve como um guia de referência para o aprendizado e uso de sistemas Linux.
2. É fornecido sob a licença GNU Free Documentation License e contém instruções sobre hardware, software, arquivos, diretórios e comandos básicos do Linux.
3. O guia é atualizado mensalmente e os usuários podem se inscrever no site para receber notificações de novas versões.
Este documento fornece uma introdução ao software Winplot, incluindo sua história, instalação e interface. Discute como o Winplot pode ser usado para plotar gráficos de funções e foi desenvolvido originalmente para rodar no DOS.
1. O documento descreve um trabalho prático sobre a implementação de um Tipo Abstrato de Dados (TAD) chamado TBloco para representar listas encadeadas de blocos e simular um mundo de blocos.
2. O TAD TBloco implementa funções para manipular os blocos de acordo com comandos como move, pile, entre outros.
3. O trabalho apresenta a especificação do problema, a assinatura das funções do TAD TBloco, exemplos de implementação das funções e testes realizados.
Este documento fornece uma descrição geral do programa Klavaro 1.0.8, que é um curso de digitação para ensinar a digitação por tato no teclado de computador. O documento explica o menu principal do programa, incluindo as configurações básicas de idioma e teclado, e descreve os cinco tipos principais de exercícios de digitação incluídos no programa.
O documento introduz a linguagem C, abordando conceitos como tipos de variáveis, memória, ponteiros, manipulação de arquivos e strings. O autor pretende desmistificar assuntos complexos da linguagem e fornecer exemplos práticos para o desenvolvimento de aplicações.
Otimização e Implementação dos Algoritmos de Caminhos Mínimos: Dijkstra e Floyd-Warshall.
Este trabalho obteve a primeira colocação na 1ª Competição de Caminhos Mínimos do DECOM/UFOP.
Este livro apresenta o framework Angular 2 utilizando TypeScript, Node, SystemJS e Visual Studio Code. O livro ensina os conceitos básicos de TypeScript como tipos, classes, módulos e decorators, e em seguida cobre a criação de componentes Angular, templates, serviços, formulários e comunicação com servidores.
Este documento fornece um tutorial sobre o uso da ferramenta Uppaal para modelagem e verificação de sistemas de tempo real. O tutorial introduz os conceitos básicos do Uppaal, apresenta dois casos de estudo e inclui exercícios práticos para testar a compreensão do leitor.
1. Este documento serve como um guia de referência para o aprendizado e uso de sistemas Linux.
2. É fornecido sob a licença GNU Free Documentation License e contém instruções sobre hardware, software, arquivos, diretórios e comandos básicos do Linux.
3. O guia é atualizado mensalmente e os usuários podem se inscrever no site para receber notificações de novas versões.
Este documento fornece uma introdução ao software Winplot, incluindo sua história, instalação e interface. Discute como o Winplot pode ser usado para plotar gráficos de funções e foi desenvolvido originalmente para rodar no DOS.
Este documento apresenta os principais tópicos da matemática básica, incluindo teoria dos conjuntos, números, módulo, expressões algébricas, funções, geometria plana e trigonometria. O documento fornece definições, propriedades e exemplos para cada tópico, além de exercícios resolvidos.
1) Este documento serve como um guia para usuários de sistemas Linux, abordando tópicos como introdução ao Linux, hardware, software, diretórios e execução de programas.
2) Novas versões são lançadas mensalmente e os usuários podem se inscrever para receber notificações de atualizações.
3) O guia é licenciado sob a GNU Free Documentation License.
1. Este documento serve como um guia para usuários de sistemas Linux, abordando tópicos como introdução ao Linux, hardware, software, diretórios, execução de programas e partições de disco.
2. Novas versões são lançadas mensalmente e os usuários podem se inscrever para receber notificações de atualizações na página do projeto.
3. O guia é licenciado sob a GNU Free Documentation License.
1) O documento é um guia de revisão de conceitos matemáticos pré-requisitos para as disciplinas de Cálculo lecionadas no Departamento de Matemática da Universidade de Aveiro.
2) O guia abrange tópicos como números, polinômios, equações, funções e sucessões para preparar os alunos para as aulas de Cálculo.
3) O objetivo é fornecer uma revisão rápida dos conceitos-chave de forma a facilitar a integração dos alunos no ensino superior.
Este documento é uma apostila sobre conceitos básicos da linguagem C# para programação .NET. A apostila introduz os principais tópicos como a plataforma .NET, a estrutura de um programa C#, variáveis, comandos, operadores, programação orientada a objetos, tratamento de erros, manipulação de arquivos e conexão com banco de dados. O documento é dividido em 12 seções principais cobrindo esses assuntos fundamentais da linguagem C#.
O documento discute introdução ao Linux, instalação de distribuições Debian e CentOS, primeiros passos no terminal, obtenção de ajuda, comandos básicos, estrutura de diretórios, editores de texto, administração da shell e introdução a redes no Linux.
Este documento fornece informações sobre PHP, incluindo o que é PHP, como instalá-lo e configurá-lo, sintaxe básica, tipos de dados, operadores, estruturas de controle e funções. O documento também descreve o plano de ensino para um curso de PHP.
Este documento descreve a implementação de um ambiente web com ferramentas para estudo de algoritmos de criptografia através do Matlab. O projeto implementa algoritmos de criptografia simétrica como DES, Triple-DES, Blowfish, RC5 e IDEA e algoritmos assimétricos como RSA e El-Gamal. O documento fornece detalhes sobre cada algoritmo e sua implementação no Matlab para fins didáticos.
1) O documento apresenta um treinamento sobre SQL e modelo relacional, abordando conceitos como banco de dados, tabelas, consultas e relacionamentos.
2) São apresentados os principais comandos SQL como SELECT, WHERE, ORDER BY, GROUP BY e funções de agregação.
3) Também são explicados os tipos de relacionamento entre tabelas como one-to-one, one-to-many, many-to-many e como implementá-los utilizando chaves primárias e estrangeiras.
1) O documento apresenta um livro sobre cálculo utilizando o software Maple para auxiliar no ensino de cálculo diferencial e integral. 2) O objetivo é transformar aulas tradicionais em parcerias onde alunos e professores interajam ativamente, utilizando recursos computacionais. 3) Os autores esperam que o livro auxilie na compreensão dos conceitos matemáticos e no desenvolvimento de um senso crítico sobre limitações dos softwares.
Este documento fornece informações sobre como usar o sistema operacional Ubuntu recém-instalado, incluindo explicações sobre termos comuns, atualizações, aplicativos pré-instalados e dicas úteis.
1. O documento apresenta um treinamento sobre persistência com JPA 2 e Hibernate.
2. O treinamento aborda tópicos como configuração, mapeamento, manipulação de entidades e relacionamentos.
3. Também discute conceitos importantes como estados das entidades, sincronização com o banco de dados, lazy e eager loading e caching.
O documento discute conceitos básicos de algoritmos, incluindo: 1) Comandos de escrita e leitura; 2) Constantes, variáveis, atribuição e expressões aritméticas e lógicas; 3) Estruturas condicionais e de repetição. O documento também apresenta algoritmos que utilizam matrizes, listas, sub-rotinas, recursividade e ordenação.
Este documento fornece uma introdução ao ambiente R, abordando tópicos como a instalação e uso básico do R, pacotes disponíveis, objetos fundamentais como vetores e matrizes, programação em R incluindo funções e depuração, e manipulação e visualização de dados.
1. Scilab is a software environment for numerical computation and control system design.
2. It was created by researchers in France and is now maintained by a consortium.
3. The document provides an introduction to using Scilab, including its graphical interface, variables, file handling, help system, and writing Scilab scripts.
Este documento apresenta as seguintes informações sobre a linguagem G-Portugol:
1) Discute as características gerais da linguagem, incluindo seus tipos de dados primitivos como inteiro e literal, e estruturas de controle como condicionais e repetição.
2) Explica que o objetivo do manual é servir como referência para a linguagem G-Portugol e suas ferramentas, assumindo que o leitor tenha conhecimento prévio de programação.
3) Fornece um resumo dos tópicos ab
1) Este documento serve como um guia para usuários de sistemas Linux, abordando tópicos como introdução ao Linux, hardware, software, diretórios, execução de programas e partições de disco.
2) É fornecido sob a licença GNU Free Documentation License e suas novas versões são lançadas mensalmente na página do projeto.
3) O guia apresenta explicações básicas sobre sistemas operacionais, hardware, software, arquivos, diretórios e comandos para auxiliar usuários a operarem e configur
1) Este documento serve como um guia para usuários de sistemas Linux, abordando tópicos como introdução ao Linux, hardware, software, diretórios e execução de programas.
2) Novas versões são lançadas mensalmente e os usuários podem se inscrever para receber notificações de atualizações.
3) O guia é licenciado sob a GNU Free Documentation License.
1) Este documento serve como um guia para usuários de sistemas Linux, abordando tópicos como introdução ao Linux, hardware, software, diretórios e execução de programas.
2) Novas versões são lançadas mensalmente e os usuários podem se inscrever para receber notificações de atualizações.
3) O guia é licenciado sob a GNU Free Documentation License.
Este documento apresenta os principais tópicos da matemática básica, incluindo teoria dos conjuntos, números, módulo, expressões algébricas, funções, geometria plana e trigonometria. O documento fornece definições, propriedades e exemplos para cada tópico, além de exercícios resolvidos.
1) Este documento serve como um guia para usuários de sistemas Linux, abordando tópicos como introdução ao Linux, hardware, software, diretórios e execução de programas.
2) Novas versões são lançadas mensalmente e os usuários podem se inscrever para receber notificações de atualizações.
3) O guia é licenciado sob a GNU Free Documentation License.
1. Este documento serve como um guia para usuários de sistemas Linux, abordando tópicos como introdução ao Linux, hardware, software, diretórios, execução de programas e partições de disco.
2. Novas versões são lançadas mensalmente e os usuários podem se inscrever para receber notificações de atualizações na página do projeto.
3. O guia é licenciado sob a GNU Free Documentation License.
1) O documento é um guia de revisão de conceitos matemáticos pré-requisitos para as disciplinas de Cálculo lecionadas no Departamento de Matemática da Universidade de Aveiro.
2) O guia abrange tópicos como números, polinômios, equações, funções e sucessões para preparar os alunos para as aulas de Cálculo.
3) O objetivo é fornecer uma revisão rápida dos conceitos-chave de forma a facilitar a integração dos alunos no ensino superior.
Este documento é uma apostila sobre conceitos básicos da linguagem C# para programação .NET. A apostila introduz os principais tópicos como a plataforma .NET, a estrutura de um programa C#, variáveis, comandos, operadores, programação orientada a objetos, tratamento de erros, manipulação de arquivos e conexão com banco de dados. O documento é dividido em 12 seções principais cobrindo esses assuntos fundamentais da linguagem C#.
O documento discute introdução ao Linux, instalação de distribuições Debian e CentOS, primeiros passos no terminal, obtenção de ajuda, comandos básicos, estrutura de diretórios, editores de texto, administração da shell e introdução a redes no Linux.
Este documento fornece informações sobre PHP, incluindo o que é PHP, como instalá-lo e configurá-lo, sintaxe básica, tipos de dados, operadores, estruturas de controle e funções. O documento também descreve o plano de ensino para um curso de PHP.
Este documento descreve a implementação de um ambiente web com ferramentas para estudo de algoritmos de criptografia através do Matlab. O projeto implementa algoritmos de criptografia simétrica como DES, Triple-DES, Blowfish, RC5 e IDEA e algoritmos assimétricos como RSA e El-Gamal. O documento fornece detalhes sobre cada algoritmo e sua implementação no Matlab para fins didáticos.
1) O documento apresenta um treinamento sobre SQL e modelo relacional, abordando conceitos como banco de dados, tabelas, consultas e relacionamentos.
2) São apresentados os principais comandos SQL como SELECT, WHERE, ORDER BY, GROUP BY e funções de agregação.
3) Também são explicados os tipos de relacionamento entre tabelas como one-to-one, one-to-many, many-to-many e como implementá-los utilizando chaves primárias e estrangeiras.
1) O documento apresenta um livro sobre cálculo utilizando o software Maple para auxiliar no ensino de cálculo diferencial e integral. 2) O objetivo é transformar aulas tradicionais em parcerias onde alunos e professores interajam ativamente, utilizando recursos computacionais. 3) Os autores esperam que o livro auxilie na compreensão dos conceitos matemáticos e no desenvolvimento de um senso crítico sobre limitações dos softwares.
Este documento fornece informações sobre como usar o sistema operacional Ubuntu recém-instalado, incluindo explicações sobre termos comuns, atualizações, aplicativos pré-instalados e dicas úteis.
1. O documento apresenta um treinamento sobre persistência com JPA 2 e Hibernate.
2. O treinamento aborda tópicos como configuração, mapeamento, manipulação de entidades e relacionamentos.
3. Também discute conceitos importantes como estados das entidades, sincronização com o banco de dados, lazy e eager loading e caching.
O documento discute conceitos básicos de algoritmos, incluindo: 1) Comandos de escrita e leitura; 2) Constantes, variáveis, atribuição e expressões aritméticas e lógicas; 3) Estruturas condicionais e de repetição. O documento também apresenta algoritmos que utilizam matrizes, listas, sub-rotinas, recursividade e ordenação.
Este documento fornece uma introdução ao ambiente R, abordando tópicos como a instalação e uso básico do R, pacotes disponíveis, objetos fundamentais como vetores e matrizes, programação em R incluindo funções e depuração, e manipulação e visualização de dados.
1. Scilab is a software environment for numerical computation and control system design.
2. It was created by researchers in France and is now maintained by a consortium.
3. The document provides an introduction to using Scilab, including its graphical interface, variables, file handling, help system, and writing Scilab scripts.
Este documento apresenta as seguintes informações sobre a linguagem G-Portugol:
1) Discute as características gerais da linguagem, incluindo seus tipos de dados primitivos como inteiro e literal, e estruturas de controle como condicionais e repetição.
2) Explica que o objetivo do manual é servir como referência para a linguagem G-Portugol e suas ferramentas, assumindo que o leitor tenha conhecimento prévio de programação.
3) Fornece um resumo dos tópicos ab
1) Este documento serve como um guia para usuários de sistemas Linux, abordando tópicos como introdução ao Linux, hardware, software, diretórios, execução de programas e partições de disco.
2) É fornecido sob a licença GNU Free Documentation License e suas novas versões são lançadas mensalmente na página do projeto.
3) O guia apresenta explicações básicas sobre sistemas operacionais, hardware, software, arquivos, diretórios e comandos para auxiliar usuários a operarem e configur
1) Este documento serve como um guia para usuários de sistemas Linux, abordando tópicos como introdução ao Linux, hardware, software, diretórios e execução de programas.
2) Novas versões são lançadas mensalmente e os usuários podem se inscrever para receber notificações de atualizações.
3) O guia é licenciado sob a GNU Free Documentation License.
1) Este documento serve como um guia para usuários de sistemas Linux, abordando tópicos como introdução ao Linux, hardware, software, diretórios e execução de programas.
2) Novas versões são lançadas mensalmente e os usuários podem se inscrever para receber notificações de atualizações.
3) O guia é licenciado sob a GNU Free Documentation License.
1. Este documento apresenta a linguagem de programação Scilab de forma semelhante a um curso introdutório de programação, descrevendo conceitos como variáveis, operadores aritméticos, estruturas de seleção e repetição, vetores e matrizes.
2. O Scilab é um ambiente de programação para resolução de problemas científicos e de engenharia disponível para sistemas operacionais como Windows, Linux, Unix e Macintosh.
3. O documento aborda tópicos como arquivos de script, manipulação
Este documento descreve os fundamentos da programação orientada a objetos e da linguagem Java, incluindo tópicos como classes, herança, polimorfismo, tipos primitivos, expressões, exceções, APIs, desenvolvimento de interfaces gráficas e applets.
Este documento discute programação orientada a objetos usando Java. Ele cobre tópicos como classes, objetos, herança e polimorfismo, além de detalhar os principais recursos da linguagem Java como tipos, expressões, classes, exceções e o ambiente de desenvolvimento Java. O documento também descreve o uso de bibliotecas padrão Java e o desenvolvimento de aplicações gráficas e distribuídas.
Este documento discute programação orientada a objetos usando Java. Ele cobre tópicos como classes, objetos, herança e polimorfismo, além de detalhar os principais recursos da linguagem Java como tipos, expressões, classes, exceções e o ambiente de desenvolvimento Java. O documento também descreve o uso de classes da API padrão de Java, o desenvolvimento de interfaces gráficas e aplicações distribuídas.
1. O documento discute HTML, páginas web e como navegadores interpretam arquivos HTML para exibir conteúdo na web.
2. É introduzido o que é HTML, como é uma linguagem de marcação usada para formatar conteúdo em páginas da web.
3. São explicados conceitos como tags, atributos e como eles afetam a formatação e exibição do conteúdo em páginas da web.
Este manual do usuário fornece instruções sobre como usar seu novo notebook de maneira segura e efetiva. Em poucas frases, o documento descreve como desembalar e identificar as partes do notebook, orienta o leitor a ler o capítulo sobre gerenciamento de energia para obter o melhor desempenho da bateria e lista os principais capítulos sobre operação, cuidados e solução de problemas.
Este documento é um livro sobre o editor de texto Vim escrito em português. O livro é um projeto colaborativo e de código aberto que visa fornecer uma referência prática e confiável sobre o Vim.
Este documento é um livro sobre o editor de texto Vim escrito em português. O livro é um projeto colaborativo e de código aberto que visa fornecer uma referência prática e confiável sobre o Vim.
Este documento descreve um livro em português sobre o editor de texto Vim. O livro é um projeto colaborativo e de código aberto, que visa fornecer uma referência prática sobre o Vim. O documento lista os autores e o sumário do livro.
1. O documento apresenta uma introdução ao programação em C.
2. É explicado que programas de computador são formados por uma série de instruções e que o arquivo fonte contém estas instruções na linguagem C.
3. O compilador converte as instruções no arquivo fonte para a linguagem de máquina para que o computador possa executar o programa.
O documento apresenta um livro sobre a linguagem de programação Fortran 95. O livro inclui capítulos sobre conceitos básicos da linguagem, trabalhar com arquivos de entrada e saída, estruturas de controle, variáveis compostas como vetores e matrizes, alocação dinâmica de memória, e sub-rotinas e funções. O livro é destinado a estudantes e profissionais interessados em aprender os fundamentos da linguagem Fortran.
Este documento é um guia do usuário para o software QGIS versão 1.8. Ele contém instruções sobre como instalar e usar as principais ferramentas do QGIS para visualizar, editar, analisar e publicar dados geoespaciais vetoriais e raster. O guia também descreve como personalizar as configurações, trabalhar com projeções, usar extensões e integrar o QGIS com outros softwares SIG como o GRASS.
Este manual descreve o editor LaTeX Kile. Ele explica como iniciar um novo documento LaTeX usando modelos, editar documentos LaTeX usando recursos como realce de sintaxe e autocompletamento, e compilar documentos. O manual também cobre assistentes, menus personalizáveis e ferramentas de construção.
Este documento é um manual sobre shell script que contém 10 partes. Cada parte aborda um tópico diferente relacionado a shell script como expressões regulares, comandos grep, cut, test e loops. O documento fornece exemplos e explicações detalhadas sobre como usar esses recursos do shell script.
1. O documento discute o desenvolvimento web com JSF 2 e JPA 2.
2. Os tópicos incluem banco de dados, JDBC, JPA e Hibernate, web container, visão geral do JSF 2, componentes visuais, Facelets, navegação e managed beans.
3. O documento fornece exemplos de código e exercícios para cada tópico.
The Computer Science solves a lot of daily problems in our lifes, one of them is search problems. These problems sometimes are so hard to find a good solution because is necessary study hard to comprehend the problem, modeling it and after this propose a solution. In this homework, my goal is define and explain the differ- ences between the algorithms DFS - Depth-First Search and Backtrancking. Firstly, I will introduce these algorithms in the section 2 and 3 to DFS and Backtracking respectively. In the section 4 I will show the differences between them. Finally, the conclusion in the section 5.
This paper aims to make students become familiar with the UNIX environment, developing programming skills in C, to increase their exposure to a shell functionality and put into practice concepts of management processes.
Monografia: Framework Para Sistemas de Navegação de Veículos Aéreos Não Tripu...Johnnatan Messias
Tornar voos não tripulados autônomos sem dúvida capacitará novas oportunidades de desenvolvimento científico. Os drones podem ser utilizados em serviços militares como, por exemplo, em combates ou ainda bem como para missões de resgate, pesquisa aérea, supervisão e inspeção de um território, atraindo bastante atenção dos veículos de comunicação como, por exemplo, emissoras de televisão, rádio, jornais e internet. O objetivo desse projeto é saber se é possível tornar voos autônomos viáveis no drone AR.Drone 2.0 bem como a compreensão sobre o seu funcionamento. Para isso será necessário a implementação de um programa de controle para voos autônomos. Esta realização requer a aquisição de dados durante o voo, os quais são obtidos através de sensores que utilizam Arduino. A comunicação do Arduino com o drone é necessária para a inclusão de novos sensores e a utilização destes pelo Ar.Drone é realizada mediante o framework Node.js. Cada botão do controle remoto possui um comando específico, podendo ser com o objetivo de o próprio usuário criar missões ou até mesmo executar algumas missões anteriormente implementadas pelo desenvolvedor. Todos os testes foram executados no AR.Drone 2.0, utilizando o framework Node.js, sensores e um controle remoto. Mediante os experimentos e estudos apresentados tornou-se possível atingir o objetivo proposto, tornando viável a aplicação de voos autônomos no drone.
Como resultado, para a realização de voos autônomos foi elaborado um framework onde o usuário poderá criar missões de voos autônomos para o drone executa-las. Esses comandos são enviados ao drone pelo usuário devido a utilização de um controle remoto. Esse controle remoto envia dados a um sensor conectado ao Arduino que processa os dados e em seguida é lido e interpretado pelo drone.
Become autonomous unmanned flights undoubtedly enable new opportunities for scientific development. The drones can be used in military services, for example, in combat or as well as for rescue missions, aerial survey, supervision and inspection of a territory, attracting significant attention from media outlets such as, for example, television stations, radio, newspapers and internet. The goal of this project is whether it is possible to make viable autonomous flights at AR.Drone 2.0 and the understanding of its operation. This will require the implementation of a control program for autonomous flights. This framework requires the acquisition of data during the flight, which are obtained using sensors which use Arduino. The Arduino communication with the drone is needed for the inclusion of new sensors and the use of the AR.Drone is performed by the framework Node.js. Each remote button has a specific command, and may be in order for the user to create own missions or even perform some missions previously implemented by the developer. All tests were run on the AR.Drone 2.0, using the Node.js framework, sensors
Este documento descreve coletores de dados de redes sociais desenvolvidos para um trabalho prático da disciplina BCC428 - Análise de Mídia Social da Universidade Federal de Ouro Preto. Os coletores incluem: 1) um coletor da timeline pública do Twitter; 2) um coletor da timeline de um usuário do Twitter; e 3) um coletor de perfil do Twitter que retorna informações sobre o usuário.
Este documento apresenta o segundo trabalho prático da disciplina de Sistemas Operacionais da UFOP. Nele, os alunos Johnnatan Messias, Pollyanna Gonçalves e Wellington Dores analisam o uso da CPU e do disco através de comandos Unix e scripts em Python.
O documento descreve um aplicativo para Android chamado "Quadro de Avisos para Android na WEB" que permite aos usuários criarem quadros de avisos online para postarem recados. O aplicativo usa recursos como reconhecimento e síntese de voz e permite alterar o tamanho da fonte para melhorar a acessibilidade. Ele armazena informações dos usuários, quadros e recados em bancos de dados e usa criptografia para proteger as senhas.
Avaliação de Usabilidade, Comunicabilidade e Acessibilidade - Quadro de AvisosJohnnatan Messias
Este documento resume uma avaliação de usabilidade de um aplicativo móvel para quadro de avisos. Foram testadas sete tarefas com usuários, avaliando fatores como desempenho, facilidade de uso e satisfação. Os resultados indicam que o aplicativo é útil com desempenho aceitável e fácil aprendizado, apesar de algumas melhorias serem necessárias, principalmente no reconhecimento de voz.
Este trabalho consiste na criação de um simulador funcional onde cada instrução executada demora quatro ciclos para completar. Estes ciclos
são denominados: IF, ID, EX/MEM e WB.
Cálculo Numérico: Integração Numérica com Bubble SortJohnnatan Messias
Este relatório descreve o uso do método de Simpson para estimar o tempo médio de execução do algoritmo BubbleSort para ordenar diferentes quantidades de elementos. Os resultados mostram que o tempo médio estimado foi de 231,1 segundos, o que está dentro do intervalo de tempo observado nos testes experimentais.
Cálculo Numérico: Interpolação Polinomial com Bubble SortJohnnatan Messias
Este relatório apresenta os resultados de um trabalho prático de cálculo numérico utilizando o método de interpolação polinomial de diferenças divididas para estimar o tempo de ordenação de 95.000 elementos usando o algoritmo BubbleSort. O polinômio interpolador foi calculado e aplicado para estimar o tempo em 109 segundos.
UFCD_6580_Cuidados na saúde a populações mais vulneráveis_índice.pdfManuais Formação
Manual da UFCD_6580_Cuidados na saúde a populações mais vulneráveis_pronto para envio, via email e formato editável.
Email: formacaomanuaisplus@gmail.com
Slides Lição 12, Central Gospel, O Milênio, 1Tr24, Pr Henrique.pptxLuizHenriquedeAlmeid6
Slideshare Lição 12, Central Gospel, O Milênio, 1Tr24, Pr Henrique, EBD NA TV, Revista ano 11, nº 1, Revista Estudo Bíblico Jovens E Adultos, Central Gospel, 2º Trimestre de 2024, Professor, Tema, Os Grandes Temas Do Fim, Comentarista, Pr. Joá Caitano, estudantes, professores, Ervália, MG, Imperatriz, MA, Cajamar, SP, estudos bíblicos, gospel, DEUS, ESPÍRITO SANTO, JESUS CRISTO, Com. Extra Pr. Luiz Henrique, 99-99152-0454, Canal YouTube, Henriquelhas, @PrHenrique, https://ebdnatv.blogspot.com/
Telepsiquismo Utilize seu poder extrassensorial para atrair prosperidade (Jos...fran0410
Joseph Murphy ensina como re-apropriar do pode da mente.
Cada ser humano é fruto dos pensamentos e sentimentos que cria, cultiva e coloca em pratica todos os dias.
Ótima leitura!
Slides Lição 12, CPAD, A Bendita Esperança, A Marca do Cristão, 2Tr24.pptxLuizHenriquedeAlmeid6
Slideshare Lição 12, CPAD, A Bendita Esperança: A Marca do Cristão, 2Tr24, Pr Henrique, EBD NA TV, 2Tr24, Pr Henrique, EBD NA TV, Lições Bíblicas, 2º Trimestre de 2024, adultos, Tema, A CARREIRA QUE NOS ESTÁ PROPOSTA, O CAMINHO DA SALVAÇÃO, SANTIDADE E PERSEVERANÇA PARA CHEGAR AO CÉU, Coment Osiel Gomes, estudantes, professores, Ervália, MG, Imperatriz, MA, Cajamar, SP, estudos bíblicos, gospel, DEUS, ESPÍRITO SANTO, JESUS CRISTO, Com. Extra Pr. Luiz Henrique, de Almeida Silva, tel-What, 99-99152-0454, Canal YouTube, Henriquelhas, @PrHenrique, https://ebdnatv.blogspot.com/
1. Universidade Federal de Ouro Preto
Instituto de Ciências Exatas e Biológicas
Departamento de Computação
BCC264 - Sistemas Operacionais
Terceiro Trabalho Prático
Johnnatan Messias
Pollyanna Gonçalves
Wellington Dores
Professor - Fabrício Benevenuto
Ouro Preto
1 de junho de 2011
4. 1 Introdução
Este trabalho tem por objetivo fazer com que os alunos se familiarizem com o
ambiente Unix, desenvolvam habilidades de programação defensiva em C, aumentem
sua exposição às funcionalidades de interpretadores de comandos e coloquem em
prática conceitos sobre gerência de processos (p.ex., disparo e terminação).
1.1 Considerações iniciais
• Sistema Operacional utilizado: Ubuntu 11.04
• Ambiente de desenvolvimento: NetBeans IDE C/C++
• Ambiente de desenvolvimento da documentação: TeXnicCenter 1 Editor de
LTEX.
A
1.2 O Problema
Implementar uma shell mínima, a M yShell, para colocar em prática os princípios
de manipulação de processos. Esse tipo de conhecimento é essencial no desenvolvi-
mento de sistemas complexos com diversos processos, como no caso de servidores.
1.2.1 Linguagem da MyShell
A linguagem compreendida pela M yShell é bem simples. Cada sequência de
caracteres diferentes de espaço é considerada um termo. Termos podem ser oper-
ações internas da shell, nomes de programas que devem ser executados, argumentos
a serem passados para os comandos ou programas e operadores especiais. Oper-
ações internas da shell são as sequências de caracteres cd, pwd, wait e exit. Essas
operações devem sempre terminar com um sinal de m de linha (return) e devem
ser entradas logo em seguida ao prompt (isto é, devem sempre ser entrados como
linhas separadas de quaisquer outros comandos). Operadores são os símbolos (back-
ground) e | (pipe), quando ocorrem isoladamente (como um único caractere entre
espaços). Programas a serem executados são identicados pelo nome do seu ar-
quivo executável e podem ser seguidos por um número máximo de dez argumentos
(parâmetros que serão passados ao programa através do vetor argv[]. Cada comando
de disparo deve terminar com um dos operadores, ou com o m de linha.
• Fim de linha: indica que o processo deve ser disparado e a myshell deve esperar
pelo seu m antes de exibir outro prompt.
• Background: o processo deve ser disparado e a M yShell deve continuar sua
execução. Isso pode signicar a continuação da interpretação da linha de co-
mandos, se há outros comandos na linha, ou o retorno imediato ao prompt.
Cada vez que um processo é disparado em background, M yShell deve ex-
ibir uma mensagem a esse respeito, com o identicador (pid) do processo em
questão.
• Pipe: o conteúdo após o operador deve ser interpretado outro comando a ser
executado, sendo que a saída padrão do primeiro processo deve ser conectada
1
5. à entrada padrão do processo seguinte. Para simplicar a implementação,
M yShell não permite o encadeamento de pipes, isto é, não é permitido colo-
car outro pipe na saída do segundo programa. Pode-se, entretanto, colocar
ambos os programas em background terminando a sequência com o operador
apropriado (nesse caso, uma mensagem sobre a operação em background deve
ser exibida para cada processo).
Os comandos internos têm as seguintes interpretações:
• CD: muda o diretório corrente da shell. Isso terá impacto sobre os arquivos
visíveis sem um caminho completo (path).
• PWD: exibe o diretório corrente visto pelo processo.
• WAIT: faz com que a shell espere pelo término de todos os processos que
possam estare m execução antes de exibir um novo prompt. Cada processo
que seja encontrado durante um wait deve ser informado através de uma men-
sagem na linha de comando. Caso não haja processos pelos quais esperar, uma
mensagem a respeito deve ser exibida e M yShell deve continuar sua execução.
• EXIT: termina a operação da shell se não há processos em background. Caso
contrário, exibe uma mensagem informando o fato e realiza a operação wait
antes de terminar.
2 A implementação da MyShell
Mais adiante apresentamos a implementação das funções que trata um comando
qualquer que vai ser digitado pelo usuário na M yShell, algumas das funções primi-
tivas que serão utilizadas em outras funções estão explicadas abaixo:
• Primitiva f ork(): única chamada de sistema que possibilita a criação de um
processo em U N IX .
• Primitiva execv(): função em que o primeiro argumento corresponde ao cam-
inho completo para o executável ou script a ser executado e o segundo é o
nome do programa a ser executado.
• Primitiva wait(): suspende a execução do processo pai até a morte de seu
processo lho (se o lho já estiver morto, a função retorna -1, imediatamente).
• Primitiva exit(): ADICIONAR!!!!
Algumas bibliotecas da linguagem C que foram utilizadas para a execução do
programa:
• errno.h
• signal.h
• sys/types.h
• sys/wait.h
• unistd.h
2
6. 2.1 Tratamento da Entrada de dados
A função split, representada abaixo, trata a entrada de dados do usuário na
M yShell utilizando funções auxiliares da biblioteca string.h denidas na linguagem.
1
char ∗∗ split ( char ∗∗ linha , char ∗∗ vString , char ∗∗ comando , int ∗ tam ) {
char ∗
int
tok = NULL ;
char ∗ sizeof char
i ;
5 tok = ( ) malloc ( ( ) ∗200) ;
s t r c p y ( tok , ∗ linha ) ;
tok = s t r t o k ( tok , n ) ;
∗ comando = s t r t o k ( tok , ) ;
10
// P o s i ç ã o 0 reservada para o execv
vString [ 1 ] = s t r t o k (NULL, ) ;
if ( ! vString [ 0 ] )
15 vString [ 0 ] = ;
for ( i = 2; vString [ i −1]; i ++){
vString [ i ] = s t r t o k (NULL, ) ;
}
20
vString [ i − 1] = NULL ;
∗ tam = ( i − 1) ;
return
f r e e ( tok ) ;
25 vString ;
}
Programa 1: Função split
2.2 Função para comando Ls
O comando ls, em U N IX , mostra o conteúdo de um diretório passado como
argumento. A função abaixo implementada recebe como parâmetro (em forma de
string ) os argumentos que foram passados pelo usuário da M yShell: 2
void meu_ls ( char ∗∗ vArgumentos )
{
int
vArgumentos [ 0 ] = / b i n / l s ;
5 pid_cd = fork () ;
if ( pid_cd == 0)
else
execv ( / b i n / l s , vArgumentos ) ;
10
int
{
status1 ;
w a i t ( s t a t u s 1 ) ; // e s p e r a a morte de um filho
}
}
Programa 2: Função ls
3
7. 2.3 Função para comando Pwd
O comando pwd, em U N IX , apresenta o diretório corrente do usuário da M yShell.
Uma implementação para essa função é apresentada em: 3
void meu_pwd ( char ∗∗ vArgumentos )
{
vArgumentos [ 0 ] = / b i n / pwd ;
5
int pid = fork () ;
if ( pid == 0)
{
10 p r i n t f ( n ) ;
e x e c v ( / b i n / pwd , vArgumentos ) ;
p r i n t f ( n ) ;
else
}
15
int
{
status1 ;
w a i t ( s t a t u s 1 ) ;
}
20 }
Programa 3: Função pwd
2.4 Função para comando Cd
O comando cd, em U N IX , abre o diretório passado como argumento pelo usuário
da M yShell. Uma implementação para essa função é apresentada em: 4
void meu_cd ( char ∗∗ vArgumentos )
{
int pid_cd = 0;
5
if ( pid_cd == 0)
char
{
cwd [ 2 0 4 8 ] ;
cwd [ 0 ] = ' 0 ' ;
10
if ( g e t c w d ( cwd , 2048) != NULL)
if
{
( c h d i r ( vArgumentos [ 1 ] ) != 0)
{
15 printf ( It wasn ' t possible set current directory to / n
) ;
}
}
else
}
20
int
{
status1 ;
w a i t ( s t a t u s 1 ) ;
}
4
8. 25 }
Programa 4: Função cd
Para a implementação dessa função utilizamos as funções getcwd() (retorna o
nome completo do diretório corrente) e chdir (muda o diretório corrente para aquele
passado como parâmetro).
2.5 Função para comando Cat
O comando cat, em U N IX , combina um ou mais arquivos e os apresenta na
saída padrão, ou seja, mostra o conteúdo de um arquivo passado como argumento
pelo usuário da M yShell. Uma implementação para essa função é apresentada em:
5
void meu_cat ( char ∗∗ vArgumentos )
{
vArgumentos [ 0 ] = / b i n / c a t ;
5
int pid_cat = fork () ;
if ( pid_cat == 0)
else
execv ( / b i n / c a t , vArgumentos ) ;
10
int
{
status1 ;
w a i t ( s t a t u s 1 ) ;
}
15 }
Programa 5: Função cat
2.6 Função para comando Grep
O comando cat, em U N IX , procura por linhas em arquivos que correspondam
a um padrão especicado pelo usuário da M yShell e as apresenta. Uma implemen-
tação para essa função é apresentada em: 6
void meu_grep ( char ∗∗ vArgumentos )
{
int
vArgumentos [ 0 ] = / b i n / grep ;
5
if
pid = fork () ;
( pid == 0)
{
p r i n t f ( n ) ;
execv ( / b i n / grep , vArgumentos ) ;
10 p r i n t f ( n ) ;
else
}
int
{
15 status1 ;
w a i t ( s t a t u s 1 ) ;
}
5
9. }
Programa 6: Função grep
2.7 Função para comando Ping
O comando ping , em U N IX , envia pacotes ICM P para um determinado host
e mede o tempo de resposta. Uma implementação para essa função é apresentada
em: 7
void meu_ping ( char ∗∗ vArgumentos )
{
int
vArgumentos [ 0 ] = / b i n / ping ;
5
if
pid = fork () ;
( pid == 0)
{
p r i n t f ( n ) ;
execv ( / b i n / ping , vArgumentos ) ;
10 p r i n t f ( n ) ;
else
}
int
{
15 status1 ;
w a i t ( s t a t u s 1 ) ;
}
}
Programa 7: Função ping
2.8 Função para comando Kill
O comando kill, em U N IX , envia sinais a determinados processos em execução.
Por padrão é enviado o sinal SIGT ERM que requisita a nalização de um processo.
Em geral é utilizado na forma 1 , onde pid é o identicador do processo que pode
ser obtido através do comando ps 14. Uma implementação para essa função é
apresentada em: 8
void meu_kill ( char ∗∗ vArgumentos )
{
int
vArgumentos [ 0 ] = / b i n / k i l l ;
5
if
pid = fork () ;
( pid == 0)
{
p r i n t f ( n ) ;
execv ( / b i n / k i l l , vArgumentos ) ;
10 p r i n t f ( n ) ;
else
}
int
{
15 status1 ;
1 kill pid
6
10. w a i t ( s t a t u s 1 ) ;
}
}
Programa 8: Função kill
2.9 Função para comando Date
O comando date, em U N IX , simplesmente exibe a data e a hora atual do sistema
no prompt da M yShell. Uma implementação para essa função é apresentada em:
9
void meu_date ( char ∗∗ vArgumentos )
{
int
vArgumentos [ 0 ] = / b i n / d a t e ;
5
if
pid = fork () ;
( pid == 0)
{
p r i n t f ( n ) ;
execv ( / b i n / d a t e , vArgumentos ) ;
10 p r i n t f ( n ) ;
else
}
int
{
15 status1 ;
w a i t ( s t a t u s 1 ) ;
}
}
Programa 9: Função date
2.10 Função para comando Mkdir
O comando mkdir, em U N IX , cria um diretório no diretório atual da M yShell.
Uma implementação para essa função é apresentada em: 10
void meu_mkdir ( char ∗∗ vArgumentos )
{
int
vArgumentos [ 0 ] = / b i n / mkdir ;
5
if
pid = fork () ;
( pid == 0)
{
p r i n t f ( n ) ;
execv ( / b i n / mkdir , vArgumentos ) ;
10 p r i n t f ( n ) ;
else
}
int
{
15 status1 ;
w a i t ( s t a t u s 1 ) ;
}
}
7
11. Programa 10: Função mkdir
2.11 Função para comandos Mv, Rm e RmDir
Os comandos mv , rm e rmdir, em U N IX , move (ou renomeia) um diretório ou
cheiro, remove um determinado cheiro e um remove um diretório, respectivamente.
Uma implementação para essa função é apresentada em: 11
void meu_mv( char ∗∗ vArgumentos ) {
int
vArgumentos [ 0 ] = / b i n /mv ;
if
pid = fork () ;
5 ( pid == 0) {
p r i n t f ( n ) ;
e x e c v ( / b i n /mv , vArgumentos ) ;
p r i n t f ( n ) ;
10 else
int
} {
status1 ;
w a i t ( s t a t u s 1 ) ;
}
}
15
void meu_rm ( char ∗∗ vArgumentos ) {
int
vArgumentos [ 0 ] = / b i n /rm ;
if
pid = fork () ;
20 ( pid == 0) {
p r i n t f ( n ) ;
e x e c v ( / b i n /rm , vArgumentos ) ;
p r i n t f ( n ) ;
25 else
int
} {
status1 ;
w a i t ( s t a t u s 1 ) ;
}
}
30
void meu_rmdir ( char ∗∗ vArgumentos ) {
int
vArgumentos [ 0 ] = / b i n / rmdir ;
35
if
pid = fork () ;
( pid == 0) {
p r i n t f ( n ) ;
execv ( / b i n / rmdir , vArgumentos ) ;
p r i n t f ( n ) ;
40
else
int
} {
status1 ;
w a i t ( s t a t u s 1 ) ;
}
45 }
Programa 11: Funções Rm, Mv e RmDir
8
12. 2.12 Função para comando Cp
O comando cp, em U N IX , permite que o usuário faça cópia de um cheiro para
outro, onde o primeiro cheiro (passado como argumento) é lido e copiado para o
segundo (no caso da inexistência desse, o mesmo é criado). Uma implementação
para essa função é apresentada em: 12
void meu_cp ( char ∗∗ vArgumentos ) {
int
vArgumentos [ 0 ] = / b i n / cp ;
if
pid = fork () ;
5 ( pid == 0) {
p r i n t f ( n ) ;
e x e c v ( / b i n / cp , vArgumentos ) ;
p r i n t f ( n ) ;
10 else
int
} {
status1 ;
w a i t ( s t a t u s 1 ) ;
}
}
Programa 12: Função cp
2.13 Função para comando Chmod
O comando chmod, em U N IX , permite que o usuário altere as permissões de
um cheiro ou diretório no formato drwxrwxrwx, respectivamente: diretório (d),
permissão do dono (read/write/execute), do grupo (read/write/execute) e de outros
(read/write/execute). Uma implementação para essa função é apresentada em: 13
void meu_chmod ( char ∗∗ vArgumentos ) {
int
vArgumentos [ 0 ] = / b i n / chmod ;
if
pid = fork () ;
5 ( pid == 0) {
p r i n t f ( n ) ;
e x e c v ( / b i n / chmod , vArgumentos ) ;
p r i n t f ( n ) ;
10 else
int
} {
status1 ;
w a i t ( s t a t u s 1 ) ;
}
}
Programa 13: Função chmod
2.14 Função para comando Ps
O comando ps, em U N IX , lista a lista de processos em execução, geralmente
utilizado quando se necessita para saber o pid de um processo terminá-lo com o
comando kill. Uma implementação para essa função é apresentada em: 14
void meu_ps ( char ∗∗ vArgumentos ) {
9
13. int
vArgumentos [ 0 ] = / b i n / ps ;
if
pid = fork () ;
5 ( pid == 0) {
p r i n t f ( n ) ;
execv ( / b i n / ps , vArgumentos ) ;
p r i n t f ( n ) ;
10 else
int
} {
status1 ;
w a i t ( s t a t u s 1 ) ;
}
}
Programa 14: Função ps
2.15 Função para comando Sh e Bash
Os comandos sh e bash, em U N IX , são interpretadores de comandos feitos para
intermediar o usuário e seu sistema. Através deles, o usuário manda um comando,
e o interpretador o executa no sistema. Eles são a shelldo sistema. Uma imple-
mentação para essa função é apresentada em: 15
void meu_sh ( char ∗∗ vArgumentos ) {
int
vArgumentos [ 0 ] = / b i n / sh ;
if
pid = fork () ;
5 ( pid == 0) {
p r i n t f ( n ) ;
execv ( / b i n / sh , vArgumentos ) ;
p r i n t f ( n ) ;
10 else
int
} {
status1 ;
w a i t ( s t a t u s 1 ) ;
}
}
15
void meu_bash ( char ∗∗ vArgumentos ) {
int
vArgumentos [ 0 ] = / b i n / bash ;
if
pid = fork () ;
20 ( pid == 0) {
p r i n t f ( n ) ;
execv ( / b i n / bash , vArgumentos ) ;
p r i n t f ( n ) ;
25 else
int
} {
status1 ;
w a i t ( s t a t u s 1 ) ;
}
}
Programa 15: Funções Sh e Bash
10
14. 2.16 Função para comando Sleep
O comando sleep, em U N IX , é usado para dar um tempo antes de começar um
novo processo pela M yShell. Uma implementação para essa função é apresentada
em: 16
void meu_sleep ( char ∗∗ vArgumentos ) {
int
vArgumentos [ 0 ] = / b i n / s l e e p ;
if
pid = fork () ;
5 ( pid == 0) {
p r i n t f ( n ) ;
execv ( / b i n / s l e e p , vArgumentos ) ;
p r i n t f ( n ) ;
10 else
int
} {
status1 ;
w a i t ( s t a t u s 1 ) ;
}
}
Programa 16: Função sleep
2.17 Função para comando Pipe e Background
O comando (pipe), em U N IX , que faz o encadeamento de processosou
seja, ele permite que a saída de um comando seja diretamente utilizado em outro
comando. Já o comando (background) permite que um processo seja executado
em segundo plano, ou seja, a M yShell não cará impedida de inicializar outros
processos durante a execução do anterior. Uma implementação para essas funções
é apresentada em: 17
int isPipeOrBk ( char ∗ linha ){
int i , tam = strlen ( linha ) − 1;
5 for
if
( i =0; i tam ; i ++)
return
(( linha [ i ] == '| ') || ( linha [ i ] == ' ' ) ) {
1;
return
}
0;
10 }
Programa 17: Função Pipe ( )eBackground()
Ao receber o comando do usuário utilizamos a função isP ipeOrBk para vericar
em O(n) se o comando contém ou não os caracteres ou . Caso tenha, a função
retornará 1 e 0 caso contrário.
2.18 Função para comando Exit
O comando exit, em U N IX , termina a execução da M yShell se não há processos
em background, caso contrário a ação deverá ser tratada. Uma implementação para
essa função é apresentada em: 18
11
15. void meu_cat ( char ∗∗ vArgumentos )
{
vArgumentos [ 0 ] = / b i n / c a t ;
5
int pid_cat = fork () ;
if ( pid_cat == 0)
else
execv ( / b i n / c a t , vArgumentos ) ;
10
int
{
status1 ;
w a i t ( s t a t u s 1 ) ;
}
15 }
Programa 18: Função Exit
2.19 Função Principal
Abaixo apresentamos a função principal para o funcionamento da M yShell. No
corpo da função principal main é feita a entrada dos dados pelo usuário (comandos
e argumentos para tais) e o tratamento de cada caso, chamando as respectivas
funções que tratam o comando necessitado e ao nal desaloca a memória utilizada
na execução do programa. A implementação da função é apresentada abaixo: 19
/ ∗ Mini −i n t e r p r e t a d o r ∗/
#include s t d i o . h
5 #include s t d l i b . h
#include s t r i n g . h
#include u n i s t d . h
10
#include f u n c o e s . h
int int char ∗∗ a r g v )
int
main ( argc , {
linesize = 512; // Tamanho da linha de comando
15
char ∗
char ∗∗
linha = NULL ; // Linha de Comando
int
vArgumentos = NULL ; // Vetor de argumentos
char ∗
tam = 0; // Quantidade de Argumentos
int
comando = NULL ; // Comando a ser executado
20 i , linhaMatriz = 40 , colunaMatriz = 100; // dimensoes do vetor
int
de argumentos
char ∗ sizeof char ∗
pos ;
char ∗ ∗ sizeof char ∗
linha = ( ) malloc ( ( ) 512) ;
∗ linhaMatriz ) ;
char ∗ sizeof char
vArgumentos = ( ) malloc ( ( )
vArgumentos [ 0 ] = ( ) malloc ( ( ) ∗( linhaMatriz ∗
for
colunaMatriz ) ) ;
25 ( i = 1; i linhaMatriz ; i ++)
vArgumentos [ i ] = ( v A r g u m e n t o s [ 0 ] [ i ∗ colunaMatriz ] ) ;
12
16. p r i n t f ( nMYSHELL : ) n ) ;
30
p r i n t f ( DEBUG: PID %d , PPID %d n n , getpid () , getppid () ) ; // pid −
Process ID ppid − Parent Process ID
while (1) {
35 char cwd [ 2 0 4 8 ] ; // P a s t a atual
cwd [ 0 ] = ' 0 ' ;
if ( g e t c w d ( cwd , 2048) == NULL) { //
40 p e r r o r ( Nao foi possivel obter o diretorio atual .
Padronizando para / n ) ;
s t r c p y ( cwd , / ) ;
if ( c h d i r ( cwd ) != 0) {
45 p e r r o r ( Nÿo foi possivel acessar o diretorio a t u a l . n
) ;
}
}
50 newline :
p r i n t f ( M y S h e l l :~% s $ , cwd ) ;
f g e t s ( linha , linesize , stdin ) ;
55 if n ) == 0 )
goto
( strcmp ( l i n h a ,
newline ; // s e m p r e que nÿo hý comandos volta para
newline
if ( isPipeOrBk ( l i n h a ) ) {
continue
system ( l i n h a ) ;
60 ;
}
vArgumentos = s p l i t ( l i n h a , vArgumentos , comando , tam ) ; //
Guarda os comandos no vetor de args .
65 //A partir desse ponto procura pelo comando digitado e chama a
funcao correspondente
if ( strcmp ( h e l p , comando ) == 0) {
meu_help ( ) ;
70 } else if ( strcmp ( c r e d i t o s , comando ) == 0) {
creditos () ;
} else if ( strcmp ( l s , comando ) == 0) {
meu_ls ( v A r g u m e n t o s ) ;
75
} else if ( strcmp ( e x i t , comando ) == 0) {
meu_exit ( 0 ) ;
} else if ( s t r c m p ( pwd , comando ) == 0) {
80 meu_pwd ( v A r g u m e n t o s ) ;
13
17. } else if ( strcmp ( cd , comando ) == 0) {
meu_cd ( v A r g u m e n t o s ) ;
85 } else if ( strcmp ( c a t , comando ) == 0) {
meu_cat ( v A r g u m e n t o s ) ;
} else if ( strcmp ( w a i t , comando ) == 0) {
meu_wait ( ) ;
90
} else if ( s t r c m p ( , comando ) == 0) {
meu_background ( ) ;
} else if ( strcmp ( p i n g , comando ) == 0) {
95 meu_ping ( v A r g u m e n t o s ) ;
} else if ( strcmp ( k i l l , comando ) == 0) {
m e u _ k i l l ( vArgumentos ) ;
100 } else if ( strcmp ( d a t e , comando ) == 0) {
meu_date ( v A r g u m e n t o s ) ;
} else if ( strcmp ( gr ep , comando ) == 0) {
meu_grep ( v A r g u m e n t o s ) ;
105
} else if ( strcmp ( mkdir , comando ) == 0) {
meu_mkdir ( v A r g u m e n t o s ) ;
} else if ( s t r c m p ( mv , comando ) == 0) {
110 meu_mv( v A r g u m e n t o s ) ;
} else if ( s t r c m p ( rm , comando ) == 0) {
meu_rm ( v A r g u m e n t o s ) ;
115 } else if ( strcmp ( rmdir , comando ) == 0) {
meu_rmdir ( v A r g u m e n t o s ) ;
} else if ( strcmp ( cp , comando ) == 0) {
meu_cp ( v A r g u m e n t o s ) ;
120
} else if ( s t r c m p ( chmod , comando ) == 0) {
meu_chmod ( v A r g u m e n t o s ) ;
} else if ( strcmp ( echo , comando ) == 0) {
125 meu_echo ( v A r g u m e n t o s ) ;
} else if ( strcmp ( hostname , comando ) == 0) {
meu_hostname ( v A r g u m e n t o s ) ;
130 } else if ( strcmp ( ps , comando ) == 0) {
meu_ps ( v A r g u m e n t o s ) ;
} else if ( strcmp ( sh , comando ) == 0) {
meu_sh ( v A r g u m e n t o s ) ;
135
} else if ( strcmp ( bash , comando ) == 0) {
meu_bash ( v A r g u m e n t o s ) ;
14
18. } else if ( s t r c m p ( nano , comando ) == 0) {
140 meu_nano ( v A r g u m e n t o s ) ;
} else if ( strcmp ( s l e e p , comando ) == 0) {
meu_sleep ( vArgumentos ) ;
145 } else {
p r i n t f ( Comando '% s ' nÿo encontrado ! n , comando ) ;
}
linha [ 0 ] = ' 0 ' ;
150 }
f r e e ( vArgumentos [ 0 ] ) ;
f r e e ( vArgumentos ) ;
}
Programa 19: Função Main
Aqui é feita a vericação com a função isP ipeOrBk 17 de modo a escolher qual
será o uxo de execução do programa de duas maneiras:
• Caso a função isP ipeOrBk retorne 1, ou seja, tendo como instrução a execução
de um comando em Background ou utilização do Pipe chamamos o comando
System do Linux para fazer uma chamada ao Sistema de modo a executar
esses comandos.
• Caso não haja o programa será executado normalmente de modo que nós é
que contralamos a criação dos processos lhos e da execução dos comandos
contidos no
bin.
Note que também estamos utilizando uma matriz para guardar os dados que
serão passados pelo usuário da M yShell. Para essa matriz de char(ou seja, vetor de
strings) foi feita uma alocação com a quantidade de linhas da matriz de adjacên-
cias e mais uma alocação para a posição matriz[0] com tamanho Linha ∗ Coluna,
fazendo, em seguida, um redirecionamento dos endereços da matriz. Para melhor
entendimento, vide Figura 1
Figura 1: Representação da Alocação de Matriz
15