2013-08-16 3 views
11

printf이 리눅스 내부에서 어떻게 작동하는지 궁금합니다. 데이터를 STDOUT에 쓰는 방법을 이해할 수 없습니다. 내부 검색을 조금 후 printf는 내부적으로 어떻게 작동합니까?

, 내가 glibc를 다운로드하여 소스 코드를보고했다 :이 찾은 후

__printf (const char *format, ...) 
{ 
    va_list arg; 
    int done; 

    va_start (arg, format); 
    done = vfprintf (stdout, format, arg); 
    va_end (arg); 

    return done; 
} 

, 나는 깊은 vfprintf 기능에 갔다 -하지만 파일은 약 2500 익숙하지 않은 C 코드 라인. printf가 컴퓨터의 메모리 및 출력과 함께 10,000 피트 거리에서 화면에 문자를 표시하는 방법에 대한 설명을 찾고 있습니다.

어셈블리 코드라면 동일한 작업을 수행하기 위해 무엇을해야합니까? 운영 체제에 종속적입니까?

+0

모든 것이 장치에 쓰는 것만 큼 (마치 파일 인 것처럼). 장치 드라이버가 인계 받아 ASCII 값을 해석하고 모니터에이를 표시하는 방법을 알려줍니다. 디스크, 마우스 등등과 동일합니다. – Jiminion

+0

아니요, 그는 기본 쓰기뿐만 아니라 vfprintf도 이해하고자합니다. 다른 스레드는 나머지를 포함합니다. –

답변

7

나는 잘못된 레이어를보고 있다고 생각합니다. vfprintf의 로직은 인수를 형식화하고 기본 stdio 함수를 통해 대개 대상이되는 FILE 객체의 버퍼에 작성합니다. 이 출력을 파일 설명자 (또는 비 POSIX 계열 시스템, 기본 장치/파일 표현)로 가져 오는 실제 논리는 아마도 fwrite, fputc 및/또는 __ -prefixed internal functions (아마도 __overflow)입니다.

+2

감사합니다 -이 답변과 http://stackoverflow.com/questions/2442966/c-c-function-definitions-with-assembly 사이에 무슨 일이 일어나는지 더 잘 이해하고 있습니다. – sdasdadas