Tengo dos programas: primero.c
y segundo.c
1. Cuando ejecuto ./primero
obtengo esta salida:
Mensaje2\n
Mensaje1Mensaje3\n
Mensaje1Mensaje5Mensaje6
2. Cuando redirijo a un fichero usando ./primero > salida.txt
en el fichero tengo una salida diferente:
Mensaje2\n
Mensaje1Mensaje5Mensaje6
No entiendo el por qué de esa salida ni por qué es distinta al redireccionar a un fichero.
primero.c
#include <stdio.h>
main(){
printf("Mensaje1");
write(1,"Mensaje2\n",10);
if (fork()){
printf("Mensaje3\n");
execlp("segundo","segundo",0);
printf("Mensaje4");
}
printf("Mensaje5");
}
segundo.c
#include <stdio.h>
main(){
printf("Mensaje6");
}
ACTUALIZACIÓN:
Creo que al hacer un exec()
se vacía el buffer. Cuando la salida es la estándar, el carácter \n
vacía el buffer y lo imprime por pantalla porque es line-buffered. Sin embargo cuando está redireccionado al fichero no se imprime Mensaje3\n
porque es fully buffered.
El contenido en hexadecimal del archivo salida.txt
es:
00000000 4d 65 6e 73 61 6a 65 32 0a 00 4d 65 6e 73 61 6a |Mensaje2..Mensaj|
00000010 65 31 4d 65 6e 73 61 6a 65 35 4d 65 6e 73 61 6a |e1Mensaje5Mensaj|
00000020 65 36 |e6|
00000022