archivos
Diferencias
Muestra las diferencias entre dos versiones de la página.
| Ambos lados, revisión anteriorRevisión previaPróxima revisión | Revisión previa | ||
| archivos [2013/10/03 13:15] – [Archivos] lmateu | archivos [2019/09/03 13:53] (actual) – [Ejemplo: copia de archivos] lmateu | ||
|---|---|---|---|
| Línea 27: | Línea 27: | ||
| Devolver un caracter leído, para que se vuelva a leer. | Devolver un caracter leído, para que se vuelva a leer. | ||
| ungetc(c, in); | ungetc(c, in); | ||
| - | |||
| - | También se puede usar getchar y putchar para leer/ | ||
| - | entrada/ | ||
| - | recurren a getc/putc. | ||
| - | #define getchar() | ||
| - | #define putchar(c) | ||
| Entrada/ | Entrada/ | ||
| Línea 41: | Línea 35: | ||
| Lectura/ | Lectura/ | ||
| char buf[80]; | char buf[80]; | ||
| - | | + | |
| - | | + | |
| Determinar si se llegó al final del archivo: | Determinar si se llegó al final del archivo: | ||
| Línea 56: | Línea 50: | ||
| Posiciona el archivo de tal forma que el próximo caracter que se leerá | Posiciona el archivo de tal forma que el próximo caracter que se leerá | ||
| - | de in es el que encuentra en desplazamiento pos, medido desde el comienzo | + | de in es el que encuentra en el desplazamiento pos, medido desde el comienzo |
| del archivo. | del archivo. | ||
| + | |||
| + | ==== Entrada estándar, salida estándar y salida estándar de errores ==== | ||
| + | |||
| + | Todo proceso al partir cuenta con los siguientes descriptores de archivos para leer la entrada estándar, escribir la salida estándar o escribir en la salida estándar de errores respectivamente: | ||
| + | |||
| + | FILE *stdin, *stdout, *stderr; | ||
| + | |||
| + | No es necesario abrir estos archivos porque se abren automáticamente al iniciarse el proceso. | ||
| + | |||
| + | Es usual usar getchar y putchar para leer/ | ||
| + | entrada/ | ||
| + | recurren a getc/putc: | ||
| + | |||
| + | #define getchar() | ||
| + | #define putchar(c) | ||
| + | |||
| + | Es decir una invocación a getchar() se substituye textualmente por getc(stdin). | ||
| ==== Ejemplo: copia de archivos ==== | ==== Ejemplo: copia de archivos ==== | ||
| Línea 65: | Línea 76: | ||
| #include < | #include < | ||
| #include < | #include < | ||
| - | | + | |
| void filecopy(FILE *in, FILE *out) { | void filecopy(FILE *in, FILE *out) { | ||
| char buf[1024]; | char buf[1024]; | ||
| + | size_t size; | ||
| - | | + | |
| - | size_t size; | + | |
| - | if ((size= fread(buf, 1, 1024, in))==0) | + | |
| - | break; | + | |
| if (fwrite(buf, | if (fwrite(buf, | ||
| - | | + | |
| exit(1); | exit(1); | ||
| } | } | ||
| } | } | ||
| if (ferror(in)) { | if (ferror(in)) { | ||
| - | | + | |
| exit(1); | exit(1); | ||
| } | } | ||
| } | } | ||
| - | + | ||
| - | main(int argc, char *argv[]) { | + | |
| FILE *in, *out; | FILE *in, *out; | ||
| - | + | ||
| if(argc!=3) { | if(argc!=3) { | ||
| fprintf(stderr, | fprintf(stderr, | ||
| Línea 93: | Línea 102: | ||
| else { | else { | ||
| if ((in= fopen(argv[1], | if ((in= fopen(argv[1], | ||
| - | | + | |
| exit(1); | exit(1); | ||
| } | } | ||
| if ((out= fopen(argv[2], | if ((out= fopen(argv[2], | ||
| - | | + | |
| exit(1); | exit(1); | ||
| } | } | ||
| Línea 104: | Línea 113: | ||
| fclose(out); | fclose(out); | ||
| } | } | ||
| + | return 0; | ||
| } | } | ||
| </ | </ | ||
| + | |||
| + | ==== Ejercicio ==== | ||
| + | |||
| + | Estudie la [[http:// | ||
| + | |||
archivos.1380806103.txt.gz · Última modificación: por lmateu
