¿Por qué no puedo leer después de escribir?
Al escribir buf en un archivo, la posición del descriptor del archivo ya apunta al final del archivo.
Agregas lseek(fd, 0, 0) después de memset().
p>
Puedes leerlo;
Función: Mover el puntero de lectura/escritura del archivo
Archivo de encabezado: #include sys/ tipos.hgt; #include lt; unistd.hgt;
Uso: off_t lseek(int handle, off_t offset, int fromwhere);
Todos los archivos abiertos tienen un desplazamiento de archivo actual ( desplazamiento del archivo actual), en lo sucesivo denominado cfo. cfo suele ser un número entero no negativo que indica el número de bytes desde el principio del archivo hasta la posición actual en el archivo. Las operaciones de lectura y escritura generalmente comienzan en cfo e incrementan cfo según el número de bytes leídos o escritos. Cuando se abre el archivo, cfo se inicializará en 0 a menos que se utilice O_APPEND.
Utilice la función lseek para cambiar el director financiero de un archivo.
Los siguientes usos de lseek devuelven el desplazamiento actual:
off_t currpos;
currpos = lseek(fd, 0, SEEK_CUR);
Esta técnica también se puede utilizar para determinar si podemos cambiar el desplazamiento de un archivo. Si el parámetro fd (descriptor de archivo) especifica una tubería (tubería), FIFO o socket, lseek devuelve -1 y establece errno en ESPIPE.
Para archivos normales, cfo es un número entero no negativo. Pero para equipos especiales, el director financiero puede ser un número negativo. Por lo tanto, no podemos simplemente probar si el valor de retorno de lseek es menor que 0 para determinar si lseek tiene éxito o no, sino que debemos probar si el valor de retorno de lseek es igual a -1 para determinar si lseek tiene éxito o no.
lseek solo guarda cfo en el kernel y no provoca ninguna operación de E/S. Este director financiero se utilizará para operaciones de lectura y escritura posteriores.
Si el desplazamiento es mayor que la longitud actual del archivo, la siguiente operación de escritura "extenderá" el archivo. A esto se le llama crear un "agujero" en el archivo. Todos los bytes que realmente no se escribieron en el archivo se representan mediante ceros repetidos. El sistema de archivos determina si un agujero ocupa espacio en el disco duro.
El parámetro de donde es uno de los siguientes: (SEEK_SET, SEEK_CUR y SEEK_END suman 0, 1 y 2 en orden).
SEEK_SET apunta la posición de lectura y escritura al archivo cabezal y luego aumenta la cantidad de desplazamiento compensado.
SEEK_CUR agrega desplazamientos compensados a la posición actual de lectura y escritura.
SEEK_END señala la posición de lectura y escritura al final del archivo y luego agrega desplazamientos de compensación.
Cuando el valor de donde es SEEK_CUR o SEEK_END, el parámetro offset permite que aparezcan valores negativos.
Los siguientes son métodos de uso especiales:
1) Cuando desea mover la posición de lectura y escritura al principio del archivo:
lseek(int fildes, 0, SEEK_SET );
2) Cuando desea mover la posición de lectura y escritura al final del archivo:
lseek (int fildes, 0, SEEK_END);
3) Deseo Al obtener la posición actual del archivo:
lseek (int fildes, 0, SEEK_CUR valor de retorno Cuando la llamada es exitosa, se devuelve la posición actual de lectura y escritura); , que es el número de bytes desde el principio del archivo. Si hay un error, se devuelve -1 y errno almacena el código de error.