Skip to content

Commit a2ee51e

Browse files
doc: the new readme is finished
1 parent 2eb1047 commit a2ee51e

File tree

1 file changed

+151
-35
lines changed

1 file changed

+151
-35
lines changed

README.md

Lines changed: 151 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -1,37 +1,133 @@
11
<h1> Implementação do Sistema de Arquivos EXT2 </h1>
22

3-
-Primeiramente, verifique se a imagem myext2image.img está na pasta "implementação", caso não esteja, por favor realize o download da imagem e a insira dentro da pasta "implementação".
4-
5-
-Como Compilar:<br>
6-
Utilizando o arquivo makefile:<br>
7-
Apenas digitar "make super"<br>
8-
Sem o makefile:<br>
9-
gcc "nome_do_arquivo".c
10-
11-
-Como executar:<br>
12-
Utilizando o arquivo makefile:<br>
13-
Apenas digitar "make debug" <br>
14-
Sem o makefile:<br>
15-
./a.out
16-
17-
-Bibliotecas usadas:<br>
18-
time.h, essa biblioteca contém diversas funções e constantes para a manipulação do tempo, como datas, horas e etc.<br>
19-
sys/types.h, define uma coleção de símbolos e estruturas de typedef.<br>
20-
sys/stat.h, declara funções relacionadas ao arquivo UNIX.<br>
21-
sys/wait.h, contém um conjunto de macros, usadas para manter processos.<br>
22-
sys/resource.h, contém definições para operações de recursos XSI.<br>
23-
fcntl.h, define requisições e argumentos para uso das funções fcntl() e open().<br>
24-
unistd.h, fornece acesso à API do sistema operacional POSIX.<br>
25-
errno.h, retorna um valor para indicar se uma função falhou.<br>
26-
./ext2_fs.h, fornece estruturas de typedef relacionadas ao EXT2.<br>
27-
28-
29-
-Exemplo de uso:<br>
30-
Utilizando o comando ls, por exemplo:
3+
Este programa implementa as estruturas de dados e operações para manipular a imagem (``.iso``) de um sistema de arquivos EXT2. As
4+
operações são invocadas a partir de um prompt (shell). O shell executa as operações a partir da referência
5+
do diretório corrente. O shell sempre inicia no raiz (``/``) da imagem informada por parâmetro.
6+
7+
As estruturas e a lógica de manipulação foram implementadas a partir da especificação do ext2:
8+
https://www.nongnu.org/ext2-doc/ext2.html
9+
10+
11+
<h3>Operações:</h3>
12+
13+
- `info`: exibe informações do disco e do sistema de arquivos.
14+
- `cat <filename>`: exibe o conteúdo de um arquivo no formato texto.
15+
- `attr <file | dir>`: exibe os atributos de um arquivo (*file*) ou diretório (*dir*).
16+
- `cd <path>`: altera o diretório corrente para o definido como *path*.
17+
- `ls`: listar os arquivos e diretórios do diretório corrente.
18+
- `pwd`: exibe o diretório corrente (caminho absoluto).
19+
- `cp '<source_path>' '<target_path>'`: copia um arquivo de origem (*source_path*) para destino (*target_path*). A origem e o destino devem ser uma partição do disco e o volume ext2 ou vice-versa. Note que os nomes de ambos arquivos precisam necessariamente estar entre aspas simples.
20+
<br>
21+
22+
23+
<h3>Para compilar:</h3>
24+
25+
- Descompacte a imagem ``myext2image.tar.gz`` e verifique sua integridade. Caso estiver corrompida, por favor realize novamente o download da imagem (isso pode ser feito [aqui](https://github.com/campiolo/ext2cat/tree/main)
26+
) ou gere sua própria imagem ext2. E, por fim, a insira no diretório raiz deste projeto.
27+
28+
```bash
29+
# utilizando o makefile
30+
make super
31+
```
32+
33+
```bash
34+
# sem makefile
35+
gcc ext2.c
36+
```
37+
38+
<h3>Para executar:</h3>
39+
<!-- ```console
40+
# ./ext2cat <ext2-image-file>
41+
``` -->
42+
43+
```bash
44+
# utilizando o makefile
45+
make debug
46+
```
47+
48+
```bash
49+
# sem makefile
50+
./a.out
51+
```
52+
53+
<br>
54+
55+
56+
## Geração da Imagem de Volume Ext2
57+
58+
Gerando imagens ext2 (64MiB com blocos de 1K):
59+
```console
60+
dd if=/dev/zero of=./myext2image.img bs=1024 count=64K
61+
mkfs.ext2 -b 1024 ./myext2image.img
62+
```
63+
64+
Verificando a integridade de um sistema ext2:
65+
```console
66+
e2fsck myext2image.img
67+
```
68+
69+
Montando a imagem do volume com ext2:
70+
```console
71+
sudo mount myext2image.img /mnt
72+
```
73+
74+
Estrutura original de arquivos do volume (comando `tree` via bash):
75+
```
76+
/
77+
├── [1.0K] documentos
78+
│   ├── [1.0K] emptydir
79+
│   ├── [9.2K] alfabeto.txt
80+
│   └── [ 0] vazio.txt
81+
├── [1.0K] imagens
82+
│   ├── [8.1M] one_piece.jpg
83+
│   ├── [391K] saber.jpg
84+
│   └── [ 11M] toscana_puzzle.jpg
85+
├── [1.0K] livros
86+
│   ├── [1.0K] classicos
87+
│   │   ├── [506K] A Journey to the Centre of the Earth - Jules Verne.txt
88+
│   │   ├── [409K] Dom Casmurro - Machado de Assis.txt
89+
│   │   ├── [861K] Dracula-Bram_Stoker.txt
90+
│   │   ├── [455K] Frankenstein-Mary_Shelley.txt
91+
│   │   └── [232K] The Worderful Wizard of Oz - L. Frank Baum.txt
92+
│   └── [1.0K] religiosos
93+
│   └── [3.9M] Biblia.txt
94+
├── [ 12K] lost+found
95+
└── [ 29] hello.txt
96+
97+
```
98+
99+
Desmontando a imagem do volume com ext2:
100+
```console
101+
sudo umount /mnt
102+
```
103+
104+
<br>
105+
106+
## Exemplos
107+
108+
Os exemplos são executados na imagem `myext2image.img`
109+
110+
Informações do volume e do ext2 (comando `info`):
111+
```console
112+
[/]$> info
113+
Volume name.....: SO-UTFPR-1k
114+
Image size......: 67108864 bytes
115+
Free space......: 32133 KiB
116+
Free inodes.....: 16355
117+
Free blocks.....: 35409
118+
Block size......: 1024 bytes
119+
Inode size......: 128 bytes
120+
Groups count....: 8
121+
Groups size.....: 8192 blocks
122+
Groups inodes...: 2048 inodes
123+
Inodetable size.: 256 blocks
124+
```
125+
<br>
126+
127+
128+
Listagem do diretório raiz (comando `ls`):
129+
```console
31130
[/]$> ls
32-
33-
Obtemos o seguinte resultado:
34-
35131
.
36132
inode: 2
37133
Record lenght: 12
@@ -74,10 +170,30 @@ Record lenght: 928
74170
Name lenght: 9
75171
File type: 1
76172

77-
-OBS.:<br>
78-
Para utilizar o comando cp, basta digitar:<br>
79-
cp 'arquivo_origem.txt' 'arquivo_destino.txt'<br>
80-
Note que ambos arquivos precisam necessariamente estar entre aspas simples.
173+
```
174+
175+
176+
177+
## Bibliotecas Utilizadas
178+
179+
- `time.h`: Oferece funções e constantes para manipulação do tempo, incluindo datas e horas.
180+
181+
- `sys/types.h`: Define símbolos e estruturas de typedef para operações diversas.
182+
183+
- `sys/stat.h`: Declara funções relacionadas a manipulação de arquivos no ambiente UNIX.
184+
185+
- `sys/wait.h`: Contém macros utilizadas para controle de processos.
186+
187+
- `sys/resource.h`: Oferece definições para operações de recursos conforme o padrão XSI.
188+
189+
- `fcntl.h`: Define requisições e argumentos para as funções `fcntl()` e `open()`, úteis para manipulação de arquivos.
190+
191+
- `unistd.h`: Fornece acesso à API do sistema operacional POSIX, facilitando operações de sistema.
192+
193+
- `errno.h`: Retorna valores para indicar falhas em funções.
194+
195+
- `./ext2_fs.h`: Contém estruturas de typedef relacionadas ao sistema de arquivos EXT2.
196+
81197

82198

83199

0 commit comments

Comments
 (0)