1
#define _XOPEN_SOURCE 500 //ESTO ES NECESARIO PARA EL PWRITE Y PREAD
11
#include "estructura_bloques.h"
13
int escribir_bloque(int fd, int lba, void *buffer)
15
return pwrite(fd, buffer, SIZE_BLOCK, lba*SIZE_BLOCK); //funcion para escribir son para linux
18
int leer_bloque(int fd, int lba, void *buffer)
20
return pread(fd, buffer, SIZE_BLOCK, lba*SIZE_BLOCK);// funcion para leer son para linux
23
#include <getopt.h> /*Este include es para parsiar argumentos de la consola */
25
unsigned long parsiarint(char *s)
27
unsigned long valor= strtol(s,&s,0); /*convierte la parte inicial de la cadena nptr en un valor entero largo de acuerdo con la base dada */
29
valor*=(1024*1024*1024);
31
valor*=(1024*1024*1024);
40
printf("uso: mkfs-turcios [--crear <tamano (g|m|k)>] <image-file>\n");
44
int main(int argc, char **argv)
49
int fd, numero_bloques;
51
unsigned long size_disco=0;
52
void *buffer=calloc(SIZE_BLOCK,1);
54
static struct option opciones[]={
55
{"crear",required_argument, NULL, 'c'},
57
};/*El Struct getgetopt.h*/
59
while((c=getopt_long_only(argc, argv, "", opciones, NULL)) !=-1)
63
case 'c': size_disco=parsiarint(optarg);
65
default: printf("Erro opcion erronea");
74
/* Ver que tan grande es la imagen o crear una nueva */
77
if((fd=open(path,O_WRONLY,0777)<0 ||fstat(fd,&sb)< 0))/* O_WRONLY viene de fcntl.h y el fstat() de stat.h*/
79
perror("Error al abrir el archivo\n"),
82
numero_bloques=sb.st_size/SIZE_BLOCK; /* Size of file, in bytes.*/
87
numero_bloques=size_disco/SIZE_BLOCK;
88
if((fd=open(path,O_WRONLY|O_CREAT|O_TRUNC))<0)
90
perror("Error al crear el archivo"),exit(1);
92
for(i=0;i<numero_bloques;i++)
94
if(write(fd,buffer,SIZE_BLOCK)<0)
96
perror("Error al escribir al archivo"),exit(1);
102
/* Escribir superbloque */
104
struct super_bloque *sp=buffer;
105
sp->magic_number=MAGIC;
106
sp->size_bloques=SIZE_BLOCK;
107
sp->total_bloques=numero_bloques;
109
sp->bloques_libres=numero_bloques-5;
110
sp->primerbloque_mapabits=3;
111
sp->sizebloques_mapabits=2;
113
escribir_bloque(fd,0,buffer);
116
/* Aqui tiene que ir el mapa de bits */
119
const int cantidad_estructdirectorios=SIZE_BLOCK/sizeof(struct directorio);
120
struct directorio *folder=buffer;
122
for(i=0;i<cantidad_estructdirectorios;i++)
125
escribir_bloque(fd,1+2,buffer);