2014-10-05 2 views
4

C 언어에서는 화면에 무엇인가를 인쇄 할 때 일반적으로 printf, puts 등을 사용합니다. 어떤 것은 모두 또는 다른 헤더 문서에 정의되어 있습니다.std lib 함수를 사용하지 않고 인쇄하려면 어떻게해야합니까?

이러한 기능을 사용하지 않고 화면에 무언가를 인쇄 할 수있는 방법이 있습니까? 즉, printf은 어떻게 실현됩니까?

+0

잘못된 대답을 위해 내 answer.sorry를 업데이트합니다. – PersianGulf

답변

2

인쇄를 사용하는 경우 프레임 버퍼 (하드웨어)과 사용자 공간에 액세스해야 할 수 있습니다 프로그램에 직접 액세스 할 수 없습니다. 그래서 그들이하는 일은 시스템 호출을 만들고 커널이 그들에게 필요한 기능을 수행하는 것입니다. printf ->write 시스템 호출 -> 커널이 데이터를 프레임 버퍼에 쓴 다음 사용자 프로그램으로 제어가 돌아갑니다. printf 또는 puts (호스트 libc에서 구현 됨)을 사용하지 않으려는 경우에도 시스템에 쓰기 시스템 호출을 사용하여 버퍼에 쓸 장치를 커널에 알려야합니다.

11

결국 C 함수 printf은 직접 write (man 2 write 참조)을 통해 sys_write 시스템 호출을 발생시킵니다. 실제 구현은 컴파일러와 표준 라이브러리에 따라 다릅니다.

0

library ncurses 당신을 도울하지만 낮은 수준의 기능을 사용 write()을 사용하려는 당신이 커널 프로그래밍을 수행 할 경우 화면 printk()

+0

질문은 C에서 구현되는 'bash'와는 별개로 'bash'와는 아무런 관련이 없습니다. 내가 작성한 편집을 롤백했습니다 (bash 태그 추가). 답변이 적절하지 않은 경우 쉽게 투표 할 수 있지만 부적절한 수정 사항을 찾고 수정하는 것이 훨씬 더 힘들므로 편집시 더 신중하고 신중해야합니다. – Anthon

+0

감사합니다. @Anthon – PersianGulf

+0

http://linuxinme.blogspot.com/2007/04/debugging-kernel-with-printk.html – PersianGulf

1

표준 헤더는 필연적으로 C 코드로 작성된 함수를 포함하는 라이브러리는 아닙니다.
그들은 C "interfase"가있는 함수이지만, 명시 적 기계 코드를 포함하고 있으며, 각각의 경우 대상 시스템에 맞게 구성되어있을 가능성이 큽니다.
표준 헤더는 이러한 방식으로 엄격한 C 코드에서 달성 할 수없는 특별한 프로세스를 제공합니다.

특정 경우에 printf()의 경우에는 헤더가 #include-d이 아닌 경우 입력/출력 작업을 수행하는 C 구문 만 사용하기 때문에 메커니즘이 없습니다.

관련 문제