Я не понимаю, как функционирует буфер printf ()

У меня есть две программы: primero.c и segundo.c

1. Когда я выполняю ./primero я получаю этот вывод:

Mensaje2\n
Mensaje1Mensaje3\n
Mensaje1Mensaje5Mensaje6

2. Когда я пересылаю в файл используя ./primero > salida.txt в файле у меня есть различный вывод:

Mensaje2\n
Mensaje1Mensaje5Mensaje6

Я не разбираюсь почему в этом выводе ни, почему она отличная от redireccionar от файла.

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"); 
}

ОБНОВЛЕНИЕ:

Я верю, в то, что, сделав один 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
6
задан 21.08.2019, 14:22
0 ответов