El lenguaje de programación c

Page 196

190 LA INTERFAZ DEL SISTEMA UNIX

CAPITULO 8

c debe ser un char, a que read necesita un apuntador a carácter. Forzar c a ser unsigned char en la proposición de regreso elimina cualquier problema de extensión de signo. La segunda versión de getchar hace la entrada en grandes fragmentos y saca los caracteres uno a la vez. #include ''syscalls.h" /* getchar: versión con buffer simple */ int getchar(void)

{ static char buf [BUFSIZ]; static char *bufp = buf; static int n = 0; if (n = = 0) { / * el buffer está vacío */ n = read(0, buf, sizeof buf); bufp = buf;

} return (—n > = 0) ? (unsigned char) *bufp + + : EOF;

} Si esta versión de getchar fuese a ser compilada con <stdio.h> incluida, sería necesario eliminar la definición del nombre getchar con #undef en caso de que esté implantada como una macro.

8.3

Open, creat, cióse, unlink

Además de la entrada, la salida y el error estándar, se pueden abrir explícita­ mente archivos para leerlos o escribirlos. Existen dos llamadas al sistema para es­ to, open y creat. § open es como el fopen expuesto en el capítulo 7, excepto que en lugar de re­ gresar un apuntador de archivo, regresa un descriptor de archivo, que es tan sólo un int. open regresa —1 si ocurre algún error. #include <fcntl.h> int fd; int open(char * nombre, int flags, int perms); fd = open(nombre, flags, perms);

Como con fopen, el argumento nombre es una cadena de caracteres que contiene el nombre del archivo. El segundo argumento, flags, es Un int que especifica cómo será abierto el archivo; los principales valores son § A pesar de que en inglés la palabra correcta es “create”, el nombre de la función es sólo “creat”. (N. de T.)


Issuu converts static files into: digital portfolios, online yearbooks, online catalogs, digital photo albums and more. Sign up and create your flipbook.