У меня есть две программы: primero.c
и segundo.c
1. Когда я выполняю ./primero
я получаю этот вывод:
Mensaje2\n
Mensaje1Mensaje3\n
Mensaje1Mensaje5Mensaje6
2. Когда я пересылаю в файл используя ./primero > salida.txt
в файле у меня есть различный вывод:
Mensaje2\n
Mensaje1Mensaje5Mensaje6
Я не разбираюсь почему в этом выводе ни, почему она отличная от redireccionar от файла.
#include <stdio.h>
main(){
printf("Mensaje1");
write(1,"Mensaje2\n",10);
if (fork()){
printf("Mensaje3\n");
execlp("segundo","segundo",0);
printf("Mensaje4");
}
printf("Mensaje5");
}
#include <stdio.h>
main(){
printf("Mensaje6");
}
ОБНОВЛЕНИЕ:
Я верю, в то, что, сделав один exec()
освобождается буфер. Когда вывод - стандарт, символ \n
опустоши буфер и он это печатает из-за экрана, потому что он line-buffered. Однако, когда он redireccionado в файл, он не печатается Mensaje3\n
потому что он fully buffered.
Контент в шестнадцатеричном файла salida.txt
он:
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