흥미로운 출력 버퍼 질문!
to be update, this is a note for me.
jyy에서 매우 흥미로운 문제가 발생했습니다.
다음과 같은 코드가 있습니다.
#include <stdio.h>
#include <unistd.h>
#include <sys/wait.h>
int main(int argc, char *argv[]) {
int n = 2;
for (int i = 0; i < n; i++) {
fork();
printf("Hello\n");
}
for (int i = 0; i < n; i++) {
wait(NULL);
}
}
이 프로그램을 실행하면 다음과 같은 결과를 얻을 수 있습니다.
//gcc fork-printf.c && ./a.out
Hello
Hello
Hello
Hello
Hello
Hello
6개의 '안녕하세요'가 있습니다.
그러나 파이프 명령을 사용하면 다음과 같습니다.
//gcc fork-printf.c && ./a.out | cat
Hello
Hello
Hello
Hello
Hello
Hello
Hello
Hello
우리는 8개의 'hello'를 받을 것입니다.
왜
Linux에서 stdout을 사용할 때:
termianl의 경우: linux 사용
line buffer
, 문자\n
를 충족하는 경우 linux는 시스템 호출을 사용하여 모든 버퍼를 출력합니다.파이프/파일의 경우: 버퍼 크기가 최대 4096B인 경우 Linux는
full buffer
를 사용합니다(fflush(stdout)
를 호출하는 경우 제외).조건 Ⅰ의 경우 라인 버퍼를 사용하여 직접 출력합니다. 그렇지 않으면 조건 Ⅱ의 경우 전체 버퍼를 사용합니다.
Reference
이 문제에 관하여(흥미로운 출력 버퍼 질문!), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/iqium/interesting-output-buffer-question-2ldp텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)