Si se abre un archivo con el siguiente comando:

FILE *f1=fopen("test.dat","a+");

La página man de lee:

un+

Abierto para leer y anexar (escribir al final del archivo). El
se crea el archivo si no existe. El archivo inicial de la posición
para la lectura se encuentra al principio del archivo, pero la salida es
siempre se anexan al final del archivo.

Lo hace f1 tiene 2 punteros de desplazamiento, uno para lectura & otro para escribir?

OriginalEl autor | 2010-09-05

3 Comentarios

  1. 18

    No.

    Sólo hay un puntero que inicialmente está en el inicio del archivo, pero cuando una operación de escritura se intenta es movido al final de el archivo. Usted puede cambiar la posición de que el uso de fseek o rewind en cualquier lugar en el archivo para leer, pero escribir las operaciones de mover de nuevo a la final de archivo.

    También puede ser útil para saber que esto es típicamente implementado en términos de ‘abierto’ con el O_APPEND bandera en sistemas POSIX: pubs.opengroup.org/onlinepubs/7908799/xsh/open.html
    En caso de que el fseek no se llama antes de la lectura, muchos espacios están impresos en el código de abajo. Yo estaba esperando nada a imprimir en la pantalla. Pero alguna razón por la que los espacios son impresos? Eso significa que EF no es detectado correctamente. Si yo elimine el fseek a continuación, los datos correctamente impreso en la pantalla. int main() { FILE *fp1; char ch; fp1=fopen("m.txt", "a+"); fputs("data appended", fp1); //fseek(fp1,0,SEEK_SET); while((ch=getc(fp1))!=EOF) { putc(ch,stdout); } fclose(fp1); return 0; }

    OriginalEl autor codaddict

  2. 4

    Puede nunca mezcla de la lectura y la escritura de las operaciones en un FILE sin llamar fseek en el medio. Es posible que funcione como desea en algunas implementaciones, pero un programa que depende de este tiene un comportamiento indefinido. Por lo tanto las preguntas de tener 2 posiciones de significado.

    Verdadero. Sin embargo, si usted nunca ha visto un sistema operativo de la implementación en C que soporta el POSIX operaciones de archivo y donde la stdio las operaciones de ARCHIVO son otra cosa que una fina capa de almacenamiento en búfer sobre el POSIX (que ha definido el comportamiento en este caso), por favor informe como un fallo en contra de que OS.
    Estoy confundido acerca de lo que estás tratando de decir. El problema de la mezcla de la lectura y la escritura en stdio sin intervenir buscan es puramente un problema de almacenamiento en búfer. No tiene nada que ver con las operaciones subyacentes en los descriptores de archivo.
    Quiero decir que considero una stdio aplicación buggy si su un comportamiento indefinido en este caso los resultados en cualquier cosa, además de cambiar donde, en todo caso, los datos almacenados en búfer está escrito. Es decir, la especificación debe haber sido la que resulta el contenido de los archivos de aplicación definido, en lugar de verdaderamente un comportamiento indefinido. De lo contrario, usted encontrará que una tonelada de programas han de explotar los fallos de seguridad.
    No, no es buggy. Por ejemplo, uno muy bonito aplicación sería la realización de __asm__("hlt"); o similar si la persona que viole esta parte de la interfaz de contrato. Sin embargo, incluso si es una paliza de la memoria, que todavía no es un bug. El error está en la aplicación de la que la invocación de la UB.

    OriginalEl autor R..

Dejar respuesta

Please enter your comment!
Please enter your name here