Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Projeto 1
Familiarizao com o Minix
Grupo 2
Bruno Umeda Grisi
Carolina Dorta
Davi Assahira
ndice
1.
OBJETIVO .................................................................................................................................. 3
2.
1. Objetivo
Este primeiro projeto objetiva conhecer a estrutura e o funcionamento
do sistema operacional Minix, desenvolvendo programas na linguagem de
programao C que utilizam as chamadas ao sistema.
Outro objetivo dessa atividade compartilhar com os demais alunos da
turma o que foi pesquisado e aprendido, ao mesmo tempo em que se
aprofunda com as apresentaes expostas.
Dessa forma, possvel consolidar a teoria da disciplina, aplicando
exerccios prticos elaborados que estendem o estudo e o interesse ao
aprendizado.
2. Aplicativo na Linguagem C
2.1. Descrio
Foi proposto o desenvolvimento de um programa a ser executado no
Minix capaz de imprimir os nomes e as datas dos arquivos localizados no
diretrio corrente.
Definio
2.2.2.
Funcionamento
2.2.3.
Stat(path, buf)
ino_t st_ino;
/* nmero inode */
mode_t st_mode;
/* modo do arquivo */
nlink_t st_nlink;
uid_t st_uid;
gid_t st_gid;
dev_t st_rdev;
off_t st_size;
time_t st_atime;
time_t st_mtime;
time_t st_ctime;
2.4. Programa
O programa foi feito da seguinte forma:
Primeiramente, h uma estrutura eachfile, que contm as informaes
nome e data/hora do arquivo. Ela construda depois do acesso ao inode
para a obteno das informaes do arquivo.
Deve-se lembrar que, quando, nesse texto, citamos arquivo, na
verdade, estamos citando uma estrutura que pode ser um arquivo em si ou
ento um diretrio, que nada mais que um arquivo que contm
referncias entre nomes (nomes de seus arquivos) e inodes.
Na teoria de sistemas operacionais, um inode (ou index node, ou ainda
n-i) uma estrutura de dados constituinte de um sistema de arquivos (SA)
que segue a semntica Unix. O inode armazena informaes sobre arquivos,
tais como o usurio de acesso, permisses e a localizao do mesmo (p.ex.,
blocos alocados num volume de disco).
Sendo assim, o fluxo do programa se resume em:
a explicada no item
6. Imprimir as informaes.
Isto foi feito a partir da funo PrintFiles, que simplesmente imprime as
informaes name e datetime dos arquivos do diretrio na tela. A nica
peculiaridade desta funo o uso de ctime() da biblioteca time.h, que
2.5.Simulao
A simulao do programa pode ser visualizada nas figuras a seguir.
Comando ls l:
Programa implementado:
3.3.Programa
O implementao do programa bem simples. Resume-se apenas a
uma linha de cdigo:
printf(Mensagem a ser impressa a cada chamada.\n);
O cdigo fonte do programa desenvolvido encontra-se no Anexo B.
3.4.Simulao
A simulao do programa pode ser visualizada na figura a seguir.
4. Material Complementar
4.1. Anexo A Cdigo Fonte do Programa Aplicativo
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <dirent.h>
#include <time.h>
#include <sys/stat.h>
#include <sys/types.h>
void MakeOneFile(char
struct eachfile *file);
void
*path);
ConstructPath(char
*directory_name,
struct
*directory_name,
char
dirent
*entry,
*file_name,
char
argc,
char
*argv[],
char
/*
MakeOneFile
Retorno: nao h
Parametros: o nome
arquivo e uma estrutura
do
diretorio,
uma
estrutura
dirent
para
*directory_name,
struct
dirent
*entry,
{
/* A estrutura stat retornada pelas funcoes fstat() e stat().
Ela contm as informaoes detalhadas de um arquivo.
A informaao retornada depende do tipo de arquivo e/ou arquivo
de sistema.*/
struct stat stbuf;
char path[255];
/*A
funo
dessa
system
call
obter
informaes
sobre
arquivo
definido por path e escrev-lo na rea apontada pelo argumento
buf.
O argumento path aponta ao parthname que nomeia o arquivo.*/
if (stat(path, &stbuf) == 0)
{
/*copia entry->d_name para file->name
lembrando que
pelo inode*/
strcpy(file->name, entry->d_name);
/*o datetime de nosso eachfile recebe st_mtime do inode, que
a data/hora da ultima modificaao*/
file->datetime = stbuf.st_mtime;
}
else
{
printf("nao foi possivel obter o status do arquivo");
exit(1);
}
}
/*
ConstructPath
Retorno: nao h
ConstructPath(char
*directory_name,
char
*file_name,
char
{
/*strcpy() copia a string em C apontada pela fonte para o array
apontado
pelo destino, incluindo o caractere nulo de fim*/
strcpy(path, directory_name);
/*strcat() junta uma copia da string
string de destino.
/*
GetQuantityOfFiles
Retorno: quantidade de arquivos em um diretorio (int)
Parametros: o nome do diretorio (um vetor de chars)
Descricao: esta funcao recebe um nome e o utiliza para abrir um
diretorio
atravs
closedir().
das
rotinas
de
diretorio
opendir(),
readdir()
*/
int GetQuantityOfFiles(char *directory_name)
{
int quantity = 0;
struct dirent *entry;
DIR *directory;
/*Opendir() abre
stream desse diretorio.
diretorio
retorna
um
ponteiro
para
do
{
/*Readdir() le
apontador para a estrutura
uma
entrada
do
diretorio
como
uma
return quantity;
}
/*
GetFiles
Retorno: numero de arquivos
Parametros: o nome do diretorio, e structs eachfile que serao
preenchidas
Descricao: esta funcao recebe o nome do diretorio e estruturas
eachfile para serem construidas
com os parametros dos arquivos do diretorio
*/
int GetFiles(char *directory_name, struct eachfile *files)
{
/*o tipo/estrutura DIR representa um diretorio*/
DIR *dir;
int i;
/*Opendir() abre
stream desse diretorio.
diretorio
retorna
um
ponteiro
para
i = 0;
do
{
/* le um arquivo e poe toda
dirent entry*/
entry = readdir(dir);
entry
que
foi
obtida
no
diretorio
com
nome
/*fecha o diretorio*/
closedir(dir);
return i;
}
/*
OrderFiles
Retorno: nao h
Parametros: a quantidade de arquivos, estruturas eachfile com os
parametros
/*
ParseParameters
Retorno: nao h
Parametros: a quantidade de arquivos, estruturas eachfile com os
parametros
datetime atravs das quais os arquivos serao ordenados
Descricao: esta funcao usa o metodo de ordenaao ____ para ordenar
as estruturas
no vetor de acordo com o parametro datetime.*/
void ParseParameters(int argc, char *argv[], char *directory_name)
{
switch(argc)
{
case 1: strcpy(directory_name, "."); break;
case 2: strcpy(directory_name, argv[1]); break;
default:
break;
}
}
/*
PrintFiles
printf("Numero
errado
de
parametros");
exit(1);
Retorno: nao h
Parametros: a quantidade de arquivos, estruturas eachfile com os
parametros
name e dattime que serao impressos
Descricao: esta
arquivos na tela*/
funcao
imprime
os
dados
nome
datetime
dos
printf("\nGRUPO 2\n");
printf("\nIntegrantes: Bruno Grisi");
printf("\n
Carolina Dorta");
printf("\n
Davi Assahira");
printf("\nInicio do programa\n\n");
printf("\nFim\n");
5. Bibliografia
1. http://www.minix-vmd.org/pub/Minixvmd/1.7.0/wwwman/man3/directory.3.html
2. http://www.cplusplus.com/reference/clibrary/cstring/strcpy.html
3. http://en.wikipedia.org/wiki/Dirent.h
4. http://souptonuts.sourceforge.net/code/dir.c.html
5. http://www.mkssoftware.com/docs/man5/struct_stat.5.asp
6. http://en.wikipedia.org/wiki/Time.h
7. http://www.dmoz.org/Computers/Algorithms/Sorting_and_Searching/
8. http://www.cis.syr.edu/~wedu/seed/Documentation/Minix3/How_to_add_syste
m_call.pdf