PROGRAMACIÓN UNIX : Sistema de Ficheros C en UNIX .

Los siguientes son ejemplos de apertura de ficheros:

int fd;
—-
fd = open («mifichero», O_RDONLY); / / Abre un fichero para leer datos de él.
fd = open («mifichero», O_WRONLYI O_TRUNC I O_CREAT, 0600);
/ / Abre un fichero para escribir datos en él. Si el fichero existe, trunca su tamaño
/ / a 0 bytes. Si el fichero no existe, lo crea con permiso de lectura y escritura para
/ / el propietario y ningún permiso para el grupo y demás usuarios.
fd = open («miiichero», RDWR | O_APPEND);
/ / Abre un fichero en modo lectura/escritura y fuerza a que el puntero de
/ / Lectura/escritura se sitúe al final del fichero.
                                          

FUNCIONES

Función fopen :

Sintaxis:

FILE *fopen(char *nombre, char *modo);

Esta función sirve para abrir y crear ficheros en disco. El valor de retorno es un puntero a una estructura FILE. Los parámetros de entrada son:

  1. nombre: una cadena que contiene un nombre de fichero válido, esto depende del sistema operativo que estemos usando. El nombre puede incluir el camino completo.
  2. modo: especifica en tipo de fichero que se abrirá o se creará y el tipo de datos que puede contener, de texto o binarios:
  • r: sólo lectura. El fichero debe existir.
  • w: se abre para escritura, se crea un fichero nuevo o se sobreescribe si ya existe.
  • a: añadir, se abre para escritura, el cursor se situa al final del fichero. Si el fichero no existe, se crea.
  • r+: lectura y escritura. El fichero debe existir.
  • w+: lectura y escritura, se crea un fichero nuevo o se sobreescribe si ya existe.
  • a+: añadir, lectura y escritura, el cursor se situa al final del fichero. Si el fichero no existe, se crea.
  • t: tipo texto, si no se especifica «t» ni «b», se asume por defecto que es «t»
  • b: tipo binario.

Función fclose:

Sintaxis:

int fclose(FILE *fichero);
Es importante cerrar los ficheros abiertos antes de abandonar la aplicación. Esta función sirve para eso. Cerrar un fichero almacena los datos que aún están en el buffer de memoria, y actualiza algunos datos de la cabecera del fichero que mantiene el sistema operativo. Además permite que otros programas puedan abrir el fichero para su uso. Muy a menudo, los ficheros no pueden ser compartidos por varios programas.
Un valor de retorno cero indica que el fichero ha sido correctamente cerrado, si ha habido algún error, el valor de retorno es la constante EOF. El parámetro es un puntero a la estructura FILE del fichero que queremos cerrar.

Función fgets:

Sintaxis:

char *fgets(char *cadena, int n, FILE *fichero);

Esta función está diseñada para leer cadenas de caracteres. Leerá hasta n-1 caracteres o hasta que lea un retorno de línea. En este último caso, el carácter de retorno de línea también es leído.
El parámetro n nos permite limitar la lectura para evitar derbordar el espacio disponible en la cadena.
El valor de retorno es un puntero a la cadena leída, si se leyó con éxito, y es NULL si se detecta el final del fichero o si hay un error. Los parámetros son: la cadena a leer, el número de caracteres máximo a leer y un puntero a una estructura FILE del fichero del que se leerá.

Función fputs:

Sintaxis:

int fputs(const char *cadena, FILE *stream);

La función fputs escribe una cadena en un fichero. No se añade el carácter de retorno de línea ni el carácter nulo final.
El valor de retorno es un número no negativo o EOF en caso de error. Los parámetros de entrada son la cadena a escribir y un puntero a la estructura FILE del fichero donde se realizará la escritura.

Función fread:

Sintaxis:

size_t fread(void *puntero, size_t tamaño, size_t nregistros, 
FILE *fichero);

Esta función está pensada para trabajar con registros de longitud constante. Es capaz de leer desde un fichero uno o varios registros de la misma longitud y a partir de una dirección de memoria determinada. El usuario es responsable de asegurarse de que hay espacio suficiente para contener la información leída.
El valor de retorno es el número de registros leídos, no el número de bytes. Los parámetros son: un puntero a la zona de memoria donde se almacenarán los datos leídos, el tamaño de cada registro, el número de registros a leer y un puntero a la estructura FILE del fichero del que se hará la lectura.

Función fwrite:

Sintaxis:

size_t fwrite(void *puntero, size_t tamaño, size_t nregistros, 
FILE *fichero);

Esta función también está pensada para trabajar con registros de longitud constante y forma pareja con fread. Es capaz de escribir hacia un fichero uno o varios registros de la misma longitud almacenados a partir de una dirección de memoria determinada.
El valor de retorno es el número de registros escritos, no el número de bytes. Los parámetros son: un puntero a la zona de memoria donde se almacenarán los datos leídos, el tamaño de cada registro, el número de registros a leer y un puntero a la estructura FILE del fichero del que se hará la lectura.

// copia.c: Copia de ficheros  // Uso: copia     #include     int main(int argc, char **argv) {      FILE *fe, *fs;      unsigned char buffer[2048]; // Buffer de 2 Kbytes      int bytesLeidos;        if(argc != 3) {         printf("Usar: copia \n");         return 1;      }        // Abrir el fichero de entrada en lectura y binario      fe = fopen(argv[1], "rb");       if(!fe) {         printf("El fichero %s no existe o no puede ser abierto.\n", 
         argv[1]);         return 1;      }      // Crear o sobreescribir el fichero de salida en binario      fs = fopen(argv[2], "wb");       if(!fs) {         printf("El fichero %s no puede ser creado.\n", argv[2]);         fclose(fe);         return 1;      }      // Bucle de copia:      while((bytesLeidos = fread(buffer, 1, 2048, fe)))         fwrite(buffer, 1, bytesLeidos, fs);      // Cerrar ficheros:      fclose(fe);      fclose(fs);      return 0;  }

Función fflush:

Sintaxis:

int fflush(FILE *fichero);

Esta función fuerza la salida de los datos acumulados en el buffer de salida del fichero. Para mejorar las prestaciones del manejo de ficheros se utilizan buffers, almacenes temporales de datos en memoria, las operaciones de salida se hacen a través del buffer, y sólo cuando el buffer se llena se realiza la escritura en el disco y se vacía el buffer. En ocasiones nos hace falta vaciar ese buffer de un modo manual, para eso sirve ésta función.
El valor de retorno es cero si la función se ejecutó con éxito, y EOF si hubo algún error. El parámetro de entrada es un puntero a la estructura FILE del fichero del que se quiere vaciar el buffer. Si es NULL se hará el vaciado de todos los ficheros abiertos.

FUNCIONES C Específicas para ficheros de aceso aleatorio.

 

Función fseek :

Sintaxis:

int fseek(FILE *fichero, long int desplazamiento, int origen);

Esta función sirve para situar el cursor del fichero para leer o escribir en el lugar deseado.
El valor de retorno es cero si la función tuvo éxito, y un valor distinto de cero si hubo algún error.
Los parámetros de entrada son: un puntero a una estructura FILE del fichero en el que queremos cambiar el cursor de lectura/escritura, el valor del desplazamiento y el punto de origen desde el que se calculará el desplazamiento.
El parámetro origen puede tener tres posibles valores:

  1. SEEK_SET el desplazamiento se cuenta desde el principio del fichero. El primer byte del fichero tiene un desplazamiento cero.
  2. SEEK_CUR el desplazamiento se cuenta desde la posición actual del cursor.
  3. SEEK_END el desplazamiento se cuenta desde el final del fichero.

 

 Ejemplos:

 El siguiente programa comprueba el estado de un fichero que l epasamos como parámetro y si existe:

#include   #include   #include   #include   #include   #include         main (int argc,char *argv[])  	    {    struct stat estado;  int st;  	st=stat(argv[1],&estado);  	if(st==-1)  		{    	printf("FICHERO %s NO EXISTE\n", argv[1]);	  	exit(0);  		}  	else      {  printf("Nº DE DISPOSITIVO:  %d\n", estado.st_dev);  printf("INODO:   %d\n", estado.st_ino);  printf("MODO: %d\n", estado.st_mode);  printf("ENLACES: %d\n", estado.st_nlink);  printf("PROPIETARIO:   %d\n", estado.st_uid);  printf("GRUPO DE PROPIETARIO:   %d\n", estado.st_gid);  printf("IDENTIFICADOR DE DISPOSITIVOS:   %d\n", estado.st_rdev);  printf("TAMAÑO:   %d\n", estado.st_size);  printf("FECHA ULTIMO ACCESO:  %d\n", estado.st_atime);  printf("FECHA DE ULTIMA MODIFICACION:  %d\n", estado.st_mtime);  printf("FECHA DE CAMBIO ADMINISTRATIVO:  %d\n", estado.st_ctime);  	}    }

 

 

 
















































Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *