Operaciones en archivo | obtener y poner puntero

Tengo algunas preguntas sobre la manipulación de un archivo;

a.) Estoy un poco confundido acerca de get y put pointer en c ++. ¿Muestro la posición correcta de get pointer y put pointer?

MyFile . seekg ( 0 , ios :: beg ) ;
MyFile . seekp ( -10 , ios :: end ) ; 

index :0 1 2 3 4 5 6 7 8 9 10  ...          -10 -9 -8 -7 -6 -5 -4 -3 -2 -1 0  
        __________________________________________________________________
       ^                                      ^               
       ^                                      ^                                  
       ^                                      ^
   get Pointer                               put pointer

Myfile . get ( character ) ;          
MyFile . write ( SomeString, 4 ) ;
MyFile . flush ( ) ;

index :0 1 2 3 4 5 6 7 8 9 10  ...          -10 -9 -8 -7 -6 -5 -4 -3 -2 -1 0  
        __________________________________________________________________
         ^                                             ^               
         ^                                             ^                         
         ^                                             ^
      get Pointer                                  put pointer

i.) ¿Seekg y seekp siempre garantizan que un puntero put siempre muestre la posición correcta?
ii.) Si sabe más sobre este tema, ¿puede mostrarme / darme algunos puntos? Debo tener cuidado cuando los use (si los hay)

b.) Es

   FileIN . seekg ( 1, ifstream :: cur ) ;

igual a

   FileIN . seekg ( 1, ios :: cur ) ; 

Plataforma: linux Formato de archivo: binario

preguntado el 08 de noviembre de 11 a las 11:11

1 Respuestas

a) Está mal. Los flujos de archivos mantienen uno puntero de archivo, tanto para la entrada como para la salida. Ambos seekg y seekp hacer la misma cosa. La razón por la que hay dos funciones diferentes es que la interfaz de iostreams es genérica, se puede usar para dispositivos que tienen punteros de colocación y obtención separados.

Cita del [filebuf] estándar:

En particular:

- Si el archivo no está abierto para lectura, la secuencia de entrada no se puede leer.

- Si el archivo no está abierto para escritura, la secuencia de salida no se puede escribir.

- Se mantiene una posición de archivo conjunto tanto para la secuencia de entrada como para la secuencia de salida.

b) Sí, son iguales.

EDIT:

index :0 1 2 3 4 5 6 7 8 9 10  ...          -10 -9 -8 -7 -6 -5 -4 -3 -2 -1 0  
       _____________________________________________________________________
       ^ file-pointer

MyFile . seekg ( 0 , ios :: beg ) ;

index :0 1 2 3 4 5 6 7 8 9 10  ...          -10 -9 -8 -7 -6 -5 -4 -3 -2 -1 0  
       _____________________________________________________________________
       ^ file-pointer

MyFile . seekp ( -10 , ios :: end ) ; 

index :0 1 2 3 4 5 6 7 8 9 10  ...          -10 -9 -8 -7 -6 -5 -4 -3 -2 -1 0  
       _____________________________________________________________________
                                             ^ file-pointer

Myfile . get ( character ) ;
// you must sync/flush if your last operation was input and you switch to output,
// or your last operation was output and you switch to input.
MyFile . sync ( ) ;

index :0 1 2 3 4 5 6 7 8 9 10  ...          -10 -9 -8 -7 -6 -5 -4 -3 -2 -1 0  
       _____________________________________________________________________
                                                 ^ file-pointer

MyFile . write ( SomeString, 4 ) ;
MyFile . flush ( ) ;
index :0 1 2 3 4 5 6 7 8 9 10  ...          -10 -9 -8 -7 -6 -5 -4 -3 -2 -1 0  
       _____________________________________________________________________
                                                             ^ file-pointer

respondido 08 nov., 11:15

"Los flujos de archivos mantienen un puntero de archivo, tanto para la entrada como para la salida" ¿Puede darme más explicaciones? - usuario478571

@fatai: Primero tendrás que explicar lo que no entiendes. - Yakov Galka

Si tienes tiempo, ¿puedes mostrarme dibujando, como hice yo, lo que intentas decirme? - usuario478571

Mi última pregunta, ¿el puntero del archivo apunta a un byte ya leído / escrito? Ejemplo: para el último caso, el puntero de archivo apunta al "índice -5", ¿ya se ha escrito el byte en el "índice -5"? - usuario478571

@ybungalobill, Mientras examinaba tu respuesta, se me ocurrió una pregunta. Lo he buscado en Google pero no puedo encontrar ninguna información confiable. Por lo tanto, he decidido preguntarte: ¿La sincronización y el flush son iguales entre sí? Además, ¿se puede usar la sincronización con fstream? - usuario319824

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.