Почему бы не выполнить второй printf? - PullRequest
0 голосов
/ 12 ноября 2018

Итак, этот мой приятель приходит с просьбой о помощи с некоторыми вещами с форком / каналом, и его код не работает.
Сначала я объяснил, что это беспорядок, но потом я начал читать еще немного, начал отбрасывать все, что могло быть не так, и закончил с этим.

#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <wait.h>

typedef void (*tFunction)();

pid_t CreateProcess(tFunction toExecute){
    pid_t pid = fork();
    if(pid)return pid;
    else  {toExecute();exit(0);}
}

void Producer_1(){
    printf("IM PROCESS 1\n");
    printf("Why I no print");
    while(1){}
}
int main(){
    CreateProcess(Producer_1);
    wait(0);
}

С как выход:
enter image description here
После этого он держится, но что здесь с printf? Если вы поместите новую строку в конце последней строки, это сработает.

1 Ответ

0 голосов
/ 12 ноября 2018

Запись в stdout является буферизацией строки по умолчанию.Это означает, что текст, записанный в stdout, не будет очищен, пока не будет написан символ новой строки.

Если вы не пишете новую строку, текст помещается в буфер.

...