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 [2012/08/23 02:10] – 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 52: | Línea 46: | ||
... | ... | ||
+ | Acceso directo: | ||
+ | fseek(in, pos, SEEKSET); | ||
+ | |||
+ | Posiciona el archivo de tal forma que el próximo caracter que se leerá | ||
+ | de in es el que encuentra en el desplazamiento pos, medido desde el comienzo | ||
+ | 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 59: | 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; | ||
- | | + | |
- | while (!feof(in)) { | + | while ((size= fread(buf, 1, 1024, in))!=0) { |
- | size_t | + | if (fwrite(buf, 1, size, out)!=size) { |
- | if (ferror(in)) { | + | |
- | fprintf(stderr, | + | |
- | exit(1); | + | |
- | } | + | |
- | if (fwrite(buf, | + | |
- | | + | |
exit(1); | exit(1); | ||
} | } | ||
+ | } | ||
+ | if (ferror(in)) { | ||
+ | perror(" | ||
+ | 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 86: | 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(2); | + | exit(1); |
} | } | ||
filecopy(in, | filecopy(in, | ||
Línea 97: | Línea 113: | ||
fclose(out); | fclose(out); | ||
} | } | ||
+ | return 0; | ||
} | } | ||
</ | </ | ||
+ | |||
+ | ==== Ejercicio ==== | ||
+ | |||
+ | Estudie la [[http:// | ||
+ |
archivos.1345687844.txt.gz · Última modificación: 2012/08/23 02:10 por lmateu