Bueno, acabo de probar su programa y tengo una idea de lo que está fallando.
Básicamente, funciona, pero con un fallo. Cuando escribes por primera vez "tu caída" en el archivo, usas un char
matriz de 4096
bytes, y escribe toda la matriz en el archivo. Lo que significa que estás escribiendo "tu caída" seguido de 4088
caracteres de nada al azar. Más tarde, cuando agrega, está agregando en la posición 4097 en adelante. Probablemente esto no sea lo que pretendías hacer.
Si simplemente cat
el archivo que cree, verá el resultado esperado "tu caída, amigo". Pero cuando lo lees completamente en tu código, solo estás leyendo 4096
caracteres. Por lo tanto, la parte ", amigo" nunca se lee, razón por la cual su programa nunca la genera.
Mi solución, necesita cambiar el tamaño de su matriz. Y cuando lea, lea en trozos de, digamos, 100 o 1000, hasta que llegue a EOF (read
devolverá -1).
La cantidad de bytes que está tratando de escribir no es correcta,
char buf[BUFFSIZE] = {'t', 'h', 'y', ' ', 'f', 'a', 'l', 'l'};
size_t n = sizeof(buf);
if(write (fd, buf, n) < 0){
en vez de eso deberías hacer
char buf[BUFFSIZE] = {'t', 'h', 'y', ' ', 'f', 'a', 'l', 'l', '\0'};
size_t n = strlen(buf); //use strlen
if(write (fd, buf, n) < 0){
Del mismo modo, haga esto también para otras escrituras y lecturas. Si no estás escribiendo '\0'
en el archivo para terminar la cadena, no la obtendrá cuando lea los datos del archivo.
Mientras lee, debe intentar hasta que se lea todo el archivo, es decir. obtienes EOF
.
Solo hay un pequeño error, debe cambiar el sizeof
función a strlen
porque el sizeof
la función devolverá el tamaño de la matriz pero el strlen
¡La función simplemente devuelve la longitud de la cadena almacenada en la matriz!