Ejemplo de ls

int maint (void) {
	DIR *dp;
	struct dirent *ep;
	
	dp = opendir("./")
	if (dp != NULL) {
		while (ep = readdir (dp)) {
			puts (ep->d_name);
		}
		(void) closedir(dp);
	}
	else {
		perror("Couldn't open the directory");
	}
	return 0;
}

Flags de ls

To Display Contents of Directory or Name of File

**ls** [ **-1** ] [ **-A** ] [ **-C** ] [ **-F** ] [**-H** | **-L** ] [ **-N** ] [ **-R** ] [ **-X**] [ **-a** ] [ **-b** ] [ **-c** ] [ **-d** ] [ **-e** ] [ **-f** ] [ **-g** ] [ **-i** ] [ **-l** ] [ **-m** ] [ **-n** ] [ **-o** ] [ **-p** ] [ **-q** ] [ **-r** ] [ **-s** ] [ **-t** ] [ **-u** ] [ **-U** ] [ **-x** ] [ *File* ... ]

To Display Contents of Directory

**ls** **-f** [ **-C** ] [ **-d** ] [ **-i** ] [ **-m** ] [ **-s** ] [ **-X**] [ **-x** ] [ **-1** ] [ **-U** ] [ *Directory ...* ]

Descripción Flags

Ejemplo de Copy

main(int argc, char *argv[]) {
    int fdold, fdnew;
    int(argc != 3) {
        fprintf(stderr, "se precisan 2 argumentos\\n");
        exit(1);
    }
    fdold = open(argv[1], O_RDONLY);

    if (fdold == -1) {
        fprintf(stderr, "No se pudo abrir el fichero %s\\n", argv[1];
        exit(1);
    }

    fdnew = creat(argv[2], 0666);

    if (fdnew == -1) {
        fprintf(stderr, "No se pudo abrir el fichero %s\\n", argv[2];
        exit(1);
    }

    copy(fdold, fdnew);
    exit(0);
}

void copy (int old, int new) {
    int count_read;
    char buffer[2048];

    while ((count_read = read(old, buffer, sizeof(buffer))) > 0 ) {
        write(new, buffer, count_read);
    }
}

Ejemplo de find

void find(char *file) {
    DIR *dp; // declaro el puntero al directorio
    struct dirent *ep; // declaro el puntero a la lista de elementos del directorio

    dp = opendir("./"); // intento abrir el dir actual
    if (dp != NULL) { 
        while (ep = readdir(dp)) { // mientras pueda leer del stream del dir,
						// Me fijo que el string pasado se contenga en el nombre
						**if (strstr(ep->d_name, file) != NULL) {**
					    // imprimo el nombre
	            puts("%s",ep->d_name);
						}
				}
        closedir(dp); // cierro el directorio
    }
    else { // si no abrió, lanzo error
        perror("No such directory");
    }
    return 0;
}

Ejemplo de Organización de un VSFS (Very Simple FileSystem)

La visión del sistema de archivos debe ser la de una partición de $N$ bloques (de 0 a $N-1$) de un tamaño $(N*4kb)$ bloques. Si suponemos un disco de unos 64 bloques, este podría verse así:

Untitled

A la hora de armar un sistema de archivos, vamos a almacenar datos. La mayor cantidad del espacio ocupado en un filesystem es por los datos de los usuarios. Esto se llama data region.

Por ejemplo, podemos ocupar $56$ de los $64$ bloques:

Untitled