2012-11-24 2 views
3

Linux 응용 프로그램 수준에서 모든 printf 메시지는 stdout으로 가고 모든 오류 메시지는 stderr으로갑니다.printk 라인 버퍼링이 필요합니까?

표준 에러는 일반적으로 버퍼링과

표준 출력은 어디 라인 버퍼

그래서 kernel space에서 우리가 또는 KERN_ERR 및 다른 수준이 메시지를 버퍼링하는 방법 다음 매크로 지정하지 않고 printk()를 사용하는 경우?

dmesg에 별도의 메커니즘이 있습니까?

답변

8

모두 printk()은 단순히 메모리 내 링 버퍼에 몇 바이트를 추가하는 것입니다 (그리고 버퍼 끝에 도달하면 랩 어라운드). 따라서, 그것이 라인 버퍼인지 아닌지를 말하는 것이 이치에 맞지 않습니다. 이것은 단지 적용되지 않습니다. 사용자 공간 stdout, stderr 메이크업 의미에서,이 커널과 printk()의 경우는 아니지만

또한 : 커널에서 그런 일이 없기 때문에이 stdout에 기록하지 않습니다.

사실,이 장치는 직렬 콘솔로 인쇄하거나 dmesg으로 검색 할 때이 링 버퍼의 내용을 실제로 전달합니다. 이것은 일반적으로 줄을 구분하는 데 LF 문자를 찾습니다.

+0

아래 질문에 대답 할 수 있다면 매우 도움이 될 것입니다. 1. 패닉이 발생했을 때, 내 pr_info 인쇄물 중 일부는 직렬 콘솔로 플러시되지 않습니다. 그들을 얻으려면 어떻게해야합니까? 2. 커널 버퍼를 비울 수있는 방법이 있습니까? 고마워요. –