GLOSARIO: ---
access Determina la accesibilidad de un fichero. ========
---
chmod Cambia el modo de acceso. =======
---
_chmod Cambia el modo de acceso. ========
---
chsize Cambia tamaño de fichero. ========
---
_close/close Cierra un descriptor de fichero. ==============
---
_creat/creat Crea un nuevo fichero o sobreescribe uno existente. ==============
---
creatnew Crea un nuevo fichero. ==========
---
creattemp Crea un fichero único en el directorio dado por el nombre de =========== fichero.
---
dup Duplica un descriptor de fichero. =====
---
dup2 Duplica el descriptor de fichero viejo_descriptor sobre el ====== descriptor de fichero existente nuevo_descriptor.
---
eof Chequea fin de fichero. =====
---
filelength Obtiene el tamaño de un fichero en bytes. ============
---
getftime Obtiene fecha y hora de un fichero. ==========
---
ioctl Controla dispositivos de I/O. =======
---
isatty Chequea tipo de dispositivo. ========
---
lock Pone los bloqueos de compartición de ficheros para controlar el ====== acceso concurrente de ficheros.
open Abre un fichero para lectura o escritura. ======
---
_open Abre un fichero para lectura o escritura. =======
---
read Lee de un fichero. ======
---
_read Lee de fichero. =======
---
setftime Pone fecha y hora de un fichero. ==========
---
setmode Pone modo de un fichero de apertura. =========
---
sopen Macro que abre un fichero en el modo compartido. =======
---
tell Obtiene la posición corriente de un puntero de fichero. ======
---
unlink Borra un fichero. ========
---
unlock Libera bloqueos de compartición de ficheros para controlar el ======== acceso concurrente.
---
write Escribe en un fichero. =======
---
_write Escribe en un fichero. ========
---
HANDLE_MAX (#define) Número máximo de descriptores. ---
ESTUDIO DE LAS FUNCIONES EXPUESTAS EN EL GLOSARIO: ---
access Determina la accesibilidad de un fichero. ========
Sintaxis:
int access (const char *nombre_fichero, int modo_acceso); þ modo_acceso = 0 chequea para existencia de fichero
þ modo_acceso = 2 chequea para permiso de escritura þ modo_acceso = 4 chequea para permiso de lectura
þ modo_acceso = 6 chequea para permiso de lectura y escritura
Si el acceso requerido es permitido, devuelve 0; en otro caso, devuelve -1 y se asigna un valor a la variable errno.
Ejemplo:
#include <stdio.h> #include <io.h>
int main (void) {
printf ("%d existe NOEXISTE.FIC\n",
existe_fichero ("NOEXISTE.FIC") ? "Sí" : "No"); return 0;
}
int existe_fichero (char *nombre_fichero) {
return (access (nombre_fichero, 0) == 0); }
---
chmod Cambia el modo de acceso. =======
Sintaxis:
int chmod (const char *path, int modo_acceso);
Cuando tiene éxito chmod() cambia el modo de acceso al fichero y devuelve 0. En otro caso chmod() devuelve -1.
El parámetro modo_acceso puede tomar alguno de los siguientes valores definidos en <sys\stat.h>:
S_IFMT Máscara de tipo de fichero S_IFDIR Directorio
S_IFIFO FIFO especial S_IFCHR Carácter especial S_IFBLK Bloque especial S_IFREG Fichero regular S_IREAD Poseedor puede leer S_IWRITE Poseedor puede escribir S_IEXEC Poseedor puede ejecutar
Ejemplo:
#include <sys\stat.h> #include <stdio.h> #include <io.h>
void hacer_solo_lectura (char *nombre_fichero); int main (void)
{
hacer_solo_lectura ("NOEXISTE.FIC"); hacer_solo_lectura ("MIFICH.FIC"); return 0;
}
void hacer_solo_lectura (char *nombre_fichero) {
int estado;
estado = chmod (nombre_fichero, S_IREAD); if (estado)
printf ("No se pudo hacer %s sólo lectura\n", nombre_fichero); else
---
_chmod Cambia el modo de acceso. ========
Sintaxis:
int _chmod (const char *path, int func [ , int atrib ] );
Si func es 0, _chmod() devuelve los atributos del fichero. Si func es 1, los atributos son puestos. Si la operación tiene éxito, _chmod() devuelve la palabra de atributo del fichero; en otro caso, devuelve -1. En el caso de un error se asigna valor a errno.
El parámetro atrib representa los atributos de fichero de MS-DOS y puede tomar los siguientes valores definidos en dos.h:
FA_RDONLY Atributo de sólo lectura FA_HIDDEN Fichero oculto
FA_SYSTEM Fichero de sistema FA_LABEL Etiqueta de la unidad FA_DIREC Directorio
FA_ARCH Archivo
---
chsize Cambia tamaño de fichero. ========
Sintaxis:
int chsize (int descriptor, long tamanio);
Si tiene éxito, chsize() devuelve 0. Si falla, devuelve -1 y se le da valor a errno.
Ejemplo:
#include <string.h> /*para utilizar strlen(): devuelve longitud de string*/ #include <fcntl.h> /* para utilizar la constante O_CREAT, ver open() */ #include <io.h> /* para utilizar write(), chsize() y close() */
int main (void) {
int descriptor;
char buf[11] = "0123456789";
/* crea fichero de texto conteniendo 10 bytes */ descritor = open ("FICH.FIC", O_CREAT);
write (descriptor, buf, strlen (buf));
/* truncar el fichero a 5 bytes de tamaño */ chsize (descriptor, 5); /* cierra el fichero */ close(handle); return 0; } ---
_close/close Cierra un descriptor de fichero. ==============
Sintaxis:
int close (int descriptor);
Si tiene éxito, close() y _close() devuelven 0; en caso contrario, estas funciones devuelven -1 y se le da valor a errno.
Ejemplo:
#include <string.h> #include <stdio.h> #include <fcntl.h> #include <io.h> void main (void) {
int descriptor;
char buf[11] = "0123456789";
/* crea un fichero conteniendo 10 bytes */ descriptor = open ("NUEVO.FIC", O_CREAT); if (descriptor > -1)
{
write (descriptor, buf, strlen (buf)); /* cierra el fichero */
close (descriptor); }
else {
printf ("Error abriendo fichero\n"); }
return 0; }
---
_creat/creat Crea un nuevo fichero o sobreescribe uno existente. ==============
Sintaxis:
int _creat (const char *path, int atrib); int creat (const char *path, int modo_acceso);
La función creat() abre el fichero en el modo dado por la variable global _fmode. La función _creat() siempre abre en modo binario. Si la operación tiene éxito, el descriptor del nuevo fichero es devuelto; en caso contario, un -1 es devuelto y asignado valor a errno.
Los valores posibles para modo_acceso se describieron en la función chmod(). La variable global _fmode está definida en los ficheros fcntl.h y stdlib.h de esta forma: int _fmode; Por defecto, se inicializa con el valor O_TEXT. Ejemplo:
#include <sys\stat.h> #include <string.h> #include <fcntl.h> #include <io.h> int main (void) {
/* cambia el modo de fichero por defecto de texto a binario */ _fmode = O_BINARY;
/* crea un fichero binario para lectura y escritura */ descriptor = creat ("FICHERO.FIC", S_IREAD | S_IWRITE); /* escribe 10 bytes al fichero */
write (descriptor, buf, strlen (buf)); /* cierra el fichero */
close (descriptor); return 0;
}
---
creatnew Crea un nuevo fichero. ==========
Sintaxis:
int creatnew (const char *path, int modo);
La función creatnew es identica a la función _creat() con la excepción de que es devuelto un error si el fichero ya existe. (Versiones del DOS 3.0 o superiores)
Los valores posibles para el parámetro modo se explicaron en la función creat(). Ejemplo: #include <string.h> #include <stdio.h> #include <errno.h> #include <dos.h> #include <io.h> int main (void) {
int descriptor;
char buf[11] = "0123456789";
/* intenta crear un fichero que no existe */ descriptor = creatnew ("FICHERO.FIC", 0); if (descriptor == -1)
printf ("FICHERO.FIC ya existe.\n"); else
{
printf ("FICHERO.FIC creado con éxito.\n"); write (descriptor, buf, strlen (buf)); close (descriptor);
}
return 0; }
---
creattemp Crea un fichero único en el directorio dado por el nombre de =========== fichero.
Sintaxis:
Esta función es similar a la función _creat(), excepto que el nombre de fichero es el nombre de path que debe terminar con un \. El nombre de fichero debería ser bastante grande para alojar el nombre de fichero. (Versiones de MS-DOS 3.0 o superiores)
Los valores posibles para atrib son los mismos que para la función creat(). Ejemplo:
#include <string.h> #include <stdio.h> #include <io.h> int main (void) {
int descriptor;
char nombre_de_path[128];
strcpy (nombre_de_path, "\\"); /*copia el string "\\" en nombre_de_path*/ /* crea un fichero único en el directorio raíz */
descriptor = creattemp (nombre_de_path, 0);
printf ("%s fue el fichero único creado.\n", nombre_de_path); close (descriptor);
return 0; }
---
dup Duplica un descriptor de fichero. =====
Sintaxis:
int dup (int descriptor);
Si la operación tiene éxito, dup() devuelve el descriptor del nuevo fichero; en otro caso, dup() devuelve -1 y se asigna valor a errno.
---
dup2 Duplica el descriptor de fichero viejo_descriptor sobre el ====== descriptor de fichero existente nuevo_descriptor.
Sintaxis:
int dup2 (int viejo_descriptor, int nuevo_descriptor); Devuelve 0 si tiene éxito; -1 si ocurre un error.
---
eof Chequea fin de fichero. =====
Sintaxis:
int eof (int descriptor);
Devuelve uno de los siguientes valores: Valor | Significado
---
filelength Obtiene el tamaño de un fichero en bytes. ============
Sintaxis:
long filelength (int descriptor);
Si ocurre un error, devuelve -1 y se asigna valor a errno. Ejemplo:
#include <string.h> #include <stdio.h> #include <fcntl.h> #include <io.h> int main (void) {
int descriptor;
char buf[11] = "0123456789";
/* crea un fichero conteniendo 10 bytes */ descriptor = open ("FICHERO.FIC", O_CREAT); write (descriptor, buf, strlen (buf)); /* visualiza el tamaño del fichero */
printf ("Longitud del fichero en bytes: %ld\n", filelength (descriptor)); /* cierra el fichero */
close (descriptor); return 0;
}
---
getftime Obtiene fecha y hora de un fichero. ==========
Sintaxis:
int getftime (int descriptor, struct ftime *pftime);
Devuelve 0 si tiene éxito, -1 si ocurre un error y además pone errno. La descripción de struct ftime se ha descrito en la función setftime().
---
ioctl Controla dispositivos de I/O. =======
Sintaxis:
int ioctl (int descriptor, int func [ , void *argdx, int argcx ] ); Para func 0 o 1, el valor devuelto es la información del dispositivo (DX de la llamada de IOCTL).
Para valores de func de 2 hasta 5, el valor devuelto es el número de bytes transferidos realmente.
Para los valores de func 6 ó 7, el valor devuelto es el estado del dispositivo.
En cualquier caso, si es detectado un error, un valor de -1 es devuelto, y se da valor a errno.
IOCTL (Control de entrada/salida para los dispositivos) es la función 68 (44 hexadecimal) de la interrupción 21 hexadecimal del DOS. Esta función del DOS tiene varias subfunciones que realizan distintas tareas. En las versiones DOS-3 había 11 subfunciones. El argumento func de ioctl() del C se corresponde con dichas subfunciones. Para saber lo que hace cada sub- función debe consultar tu manual del DOS.
Los argumentos argdx y argcx se refieren a los registros DX y CX de la CPU.
---
isatty Chequea tipo de dispositivo. ========
Sintaxis:
int isatty (int descriptor);
Si el dispositivo es un dispositivo de carácter, isatty() devuelve un valor distinto de cero.
Ejemplo:
#include <stdio.h> #include <io.h> int main (void) {
int descriptor;
descriptor = fileno (stdprn); if (isatty (descriptor))
printf("Descriptor %d es un tipo de dispositivo\n", descriptor); else
printf("Descriptor %d no es un tipo de dispositivo\n", descriptor); return 0;
}
---
lock Pone los bloqueos de compartición de ficheros para controlar el ====== acceso concurrente de ficheros.
Sintaxis:
int lock (int descriptor, long desplazamiento, long longitud);
Previene el acceso de lectura o escritura por otro programa para la región que empieza en la dirección desplazamiento y abarca longitud bytes.
Devuelve 0 en caso de éxito, -1 en caso de error.
---
lseek Mueve el puntero de fichero de lectura/escritura. =======
Sintaxis:
---
open Abre un fichero para lectura o escritura. ======
Sintaxis:
int open (const char *path, int acceso [ , unsigned modo ] );
Si la operación se hace correctamente, open() devuelve un descriptor de fichero; en cualquier otro caso devuelve -1 y le da valor a errno. Las definiciones de bits para el argumento acceso están en el fichero fcntl.h y son las siguientes:
O_APPEND Añade a final de fichero O_BINARY No traslación
O_CREAT Crea y abre fichero O_EXCL Apertura exclusiva O_RDONLY Sólo lectura
O_RDWR Lectura/escritura O_TEXT Traslación CR-LF
O_TRUNC Apertura con truncación O_WRONLY Sólo escritura
Para _open(), el valor de acceso en MS-DOS 2.x está limitado a O_RDONLY, O_WRONLY y O_RDWR.
Para MS-DOS 3.x, los siguientes valores adicionales pueden ser usados también:
O_NOINHERIT Proceso hijo hereda fichero
O_DENYALL Error si abierto para lectura/escritura O_DENYWRITE Error si abierto para escritura
O_DENYREAD Error si abierto para lectura O_DENYNONE Permite acceso concurrente
Sólo una de las opciones O_DENYxxx pueden ser incluidas en una simple apertura.
Los valores posibles que puede tomar el argumento modo se describieron en la función chmod(). Ejemplo: #include <string.h> #include <stdio.h> #include <fcntl.h> #include <io.h> int main (void) {
int descriptor;
char mensaje[] = "Hola mundo";
if ((descriptor = open ("PRUEBA.$$$", O_CREAT | O_TEXT)) == -1) {
perror ("Error"); return 1;
}
write (descriptor, mensaje, strlen (mensaje)); close (descriptor);
return 0; }
---
_open Abre un fichero para lectura o escritura. =======
Sintaxis:
int _open (const char *nombre_de_fichero, int flags);
Si la operación tiene éxito, _open() devuelve un descriptor de fichero; en cualquier otro caso devuelve -1.
Las definiciones de bits para el argumento flags son las mismas que para el argumento acceso en la descripción de la función open().
Ejemplo:
#include <string.h> #include <stdio.h> #include <fcntl.h> #include <io.h> int main (void) {
int descriptor;
char mensaje[] = "Hola mundo";
if ((descriptor = _open ("PRUEBA.$$$", O_RDWR)) == -1) {
perror ("Error"); return 1;
}
_write (descriptor, mensaje, strlen (mensaje)); _close (descriptor);
return 0; }
---
read Lee de un fichero. ======
Sintaxis:
int read (int descriptor, void *buffer, unsigned longitud);
Si la operación tiene éxito, devuelve un entero indicando el número de bytes colocados en el buffer; si el fichero fue abierto en modo texto, read() no cuenta retornos de carros o caracteres Ctrl-Z en el número de bytes leídos.
En caso de error, devuelve -1 y le da valor a errno.
---
_read Lee de fichero. =======
Sintaxis:
int _read (int descriptor, void *buffer, unsigned longitud); Devuelve el número de bytes leídos; si se detecta el fin de fichero,
---
setftime Pone fecha y hora de un fichero. ==========
Sintaxis:
int setftime (int descriptor, struct ftime *ptime); Devuelve 0 si tiene éxito; en otro caso devuelve -1.
struct ftime está declarada en el fichero io.h del siguiente modo: struct ftime {
unsigned ft_tsec : 5; /* intervalo de dos segundos */ unsigned ft_min : 6; /* minutos */
unsigned ft_hour : 5; /* horas */ unsigned ft_day : 5; /* días */ unsigned ft_month : 4; /* meses */ unsigned ft_year : 7; /* año */ };
---
setmode Pone modo de un fichero de apertura. =========
Sintaxis:
int setmode (int descriptor, int modo); Devuelve 0 si tiene éxito; en otro caso -1.
Los valores posibles de modo se describieron en la función open(). Ejemplo:
#include <stdio.h> #include <fcntl.h> #include <io.h> int main (void) {
int resultado;
resultado = setmode (fileno (stdprn), O_TEXT); if (resultado == -1)
perror ("Modo no disponible"); else
printf ("Modo cambiado con éxito"); return 0;
}
---
sopen Macro que abre un fichero en el modo compartido. =======
Sintaxis:
sopen (path, acceso, shflag, modo)
Está incluido para compatibilidad con las distintas versiones de Turbo C y otros compiladores.
El significado de los parámetros acceso y modo se han explicado en las funciones open() y chmod() respectivamente. El parámetro shflag contiene el modo de compartición de ficheros y las constantes definidas para ello
en el fichero share.h son las siguientes: SH_COMPAT Modo de compatibilidad
SH_DENYRW Denegado acceso de lectura y escritura SH_DENYWR Denegado acceso de escritura
SH_DENYRD Denegado acceso de lectura
SH_DENYNONE Permite acceso de lectura y escritura SH_DENYNO Igual que SH_DENYNONE (compatibilidad)
---
tell Obtiene la posición corriente de un puntero de fichero. ======
Sintaxis:
long tell (int descriptor);
Devuelve la posición actual del puntero de fichero o -1 en caso de error. Ejemplo:
#include <string.h> #include <stdio.h> #include <fcntl.h> #include <io.h> int main (void) {
int descriptor;
char mensaje[] = "Hola mundo";
if ((descriptor = open ("PRUEBA.$$$", O_CREAT | O_TEXT | O_APPEND)) == -1) {
perror ("Error"); return 1;
}
write (descriptor, mensaje, strlen (mensaje));
printf ("El puntero de fichero está en el byte %ld\n", tell (descriptor)); close (descriptor);
return 0; }
---
unlink Borra un fichero. ========
Sintaxis:
int unlink (const char *nombre_de_fichero);
Si el nombre de fichero tiene atributo de sólo lectura, unlink fallará. Llama a chmod() primero para cambiar el atributo de fichero.
Devuelve 0 en caso de éxito; -1 en caso de error.
El prototipo de esta función está en los ficheros dos.h, io.h y stdio.h. La función remove() cuyo prototipo se encuentra en stdio.h es en realidad una macro que se expande a una llamada a unlink().
Sintaxis:
int unlock (int descriptor, long desplazamiento, long longitud); Devuelve 0 si tiene éxito; -1 si ocurre un error.
---
write Escribe en un fichero. =======
Sintaxis:
int write (int descriptor, void *buffer, unsigned longitud); Devuelve el número de bytes escritos, o -1 si ocurre un error.
---
_write Escribe en un fichero. ========
Sintaxis:
int _write (int descriptor, void *buffer, unsigned longitud); Devuelve el número de bytes escritos, o -1 si ocurre un error.
--- HANDLE_MAX (#define) ---
Número máximo de descriptores.