man(ISO) Especificación de extraer_directorio man(ISO)
NOMBRE
extraer_directorio - función que extrae un directorio de un fichero tipo mypackzip.
UTILIZACIÓN
#include "s_header.h"
int extraer_directorio(char * dir_destino, char * file_mypackzip);
DESCRIPCIÓN
La función extraer_directorio(...) debe extraer todos los ficheros
contenidos dentro del archivo file_mypackzip perteneciente al
directorio dir_destino. Es decir aquellos ficheros que su nombre
comience por la ruta de dir_destino. P.e.
ret= extraer_directorio("dir1/subdir2", "./mypack.mpz");
Deberia extraer todos los ficheros contenidos en el fichero ./mypack.mpz
que tengan la ruta dir1/subdir2 (dir1/subdir2/fich1, dir1/subdir2/fich2,
...)
Si el directorio destino dir_destino no existe, se debe crear en el
directorio actual (./dir_destino)
El formato de fichero file_mypackzip se describe en la estructura s_header
/**
* @file s_header.h
* @author G.A.
* @date 06/05/2019
* @brief Include file struct s_header and struct s_info
* @details A .h C file with the definition struct s_header and struct s_info of mypackzip file format
*
*/
#define TAM_S_HEADER 512
#define MAX_FILE_NAME 256
struct s_info {
char Tipo; // ='Z'
char Compri; // ='N' (por defecto) o 'Y'. Indica si los datos
// del fichero están almacenados de forma
// comprimida
unsigned long TamOri; // Tamanio original del fichero (sin comprimir)
unsigned long TamComp; // Tamanio del fichero comprimido. Si los datos
// no estan comprimidos, su valor es el mismo de
// TamOri
char FileName[MAX_FILE_NAME]; // Nombre del fichero origen
};
#define TAM_S_INFO sizeof(struct s_info )
#define RESTO_HEADER (TAM_S_HEADER - TAM_S_INFO)
struct s_header {
struct s_info InfoF; // Información del fichero
char RestoHeader[RESTO_HEADER]; // ToDo...
};
VALOR DE RETORNO
Si todo funciona correctamente , extraer_directorio(...) devolverá cero. En
caso contrario no extraerá nada y retornará los errores indicados en el
apartado de ERRORES.
ERRORES
E_OPEN (1)
No se puede abrir file_mypackzip.
E_CREAT_DIR (2)
No se puede crear dir_fuente.
E_DESCO (99)
Otro tipo de errores
NOTAS
Nota1: El programa que utilice esta función , deberá informar por la salida
de error estándar un mensaje indicando el tipo de error
COMPATIBILIDAD
extraer_directorio(...) debería funcionar en cualquier sistema UNIX.
VEASE TAMBIEN
mypackzip(ISO), insertar_directorio(ISO), insertar_fichero(ISO), extraer_fichero(ISO).
AUTOR
Nombre del autor(es).
1.0 24 Feb 2020 man(ISO)
./extraer_directorio posicion fichero_empaquetado
DESCRIPCIÓN
extraer_directorio debe generar un directorio (en la ruta especificada en su
nombre) contenido en el fichero fichero_empaquetado (con formato pack) que
se pasa como argumento.
El directorio a extraer corresponde al directorio que se encuentre en el
número de registro posicion en el fichero fichero_empaquetado.
posicion debe ser un valor de 0 a TAM-1 donde TAM es en número máximo de elementos
tenga el fichero fichero_empaquetado.
El nombre del directorio a crear será el que se indique en el registro indicado por
num_fichero ( ver s_header).
#include <sys/types.h>
#define TAM_S_HEADER 512
#define MAX_FILE_NAME 256
#define RESTO_HEADER (TAM_S_HEADER - 1 - MAX_FILE_NAME- sizeof(mode_t) )
struct s_header {
char Tipo; // ='1'
char FileName[MAX_FILE_NAME]; // Nombre del fichero/directorio fuente (con la ruta especificada)
mode_t st_mode; // Tipo Fichero o Directorio. Como el campo st_mode de struct stat
// este campo es de 16 bits. Pero tipo de fichero se guarda en los bits(15-13) 0xX---
// S_IFREG 0100000 Fichero regular (formato octal)
// S_IFDIR 0040000 Directorio (formato octal)
// ToDo
char RestoHeader[RESTO_HEADER]; // ToDo
};
VALORES DE SALIDA
En las siguientes situaciones no mostrará el resultado en la salida estándar y devuelve
un código de error, informando además por la salida de error estándar un mensaje
indicando el tipo de error:
- Número de argumentos erróneo.
- No se puede abrir fichero_empaquetado.
- Número de registro erróneoneo.
- Otro tipo de errores.
En caso contrario devuelve 0.
COMPATIBILIDAD
extraer_directorio debería funcionar en cualquier sistema UNIX.
VEASE TAMBIEN
mypackzip(ISO), insertar_fichero(ISO), extraer_fichero(ISO),insertar_directorio(ISO).
AUTOR
Nombre del autor(es).
1.0 24 Feb 2020 man(ISO)