2012-11-18 4 views
0

모니터에 표시된 데이터가 어떻게 저장됩니까? 메모리에 저장되어 있습니까? 그렇다면 어떻게 액세스 할 수 있습니까? 이유는 내가 조작중인 데이터를 저장하기 위해 배열을 사용하는 텍스트 편집기를 프로그래밍하기 때문입니다. 내 자신의 배열을 사용하는 대신 화면에 표시된 데이터가 들어있는 메모리에 액세스 할 수 있는지 궁금합니다. 동일한 데이터에 대해 메모리를 두 번 예약하는 것은 중복 된 것처럼 보입니다. 하지만 모니터에 표시되는 데이터가 모니터에 저장되는 방식 또는 저장하는 경우조차도 알지 못합니다.stdout은 데이터를 어떻게 저장합니까? - C

+0

텍스트 편집기는 커널이 아닙니다. [프레임 버퍼] (http://en.wikipedia.org/wiki/Framebuffer)에 직접 액세스 할 필요가 없습니다. 또한 stdout은 이미 프레임 버퍼와 사용자 공간 프로세스 간의 간접적 인 수준이며 실제 하드웨어 레지스터와 혼동 스럽습니다. –

답변

3

stdout의 위치에 대한 가정은 거의 할 수 없습니다. 그것은 어딘가에 버퍼로 끝날 터미널에 갈 수도 있습니다. 또는 다른 프로세스로 파이프 될 수 있습니다. 또는 /dev/null으로 갈 수도 있습니다. 또는 라인 프린터 등등. 그리고 어딘가에 메모리에 저장되는 경우에도, 그 버퍼는 제한된 크기를 가지며, 따라서 반드시 전체 파일을 보유 할 필요는 없습니다. 그리고 어쨌든 메모리에 액세스 할 수있는 권한이 없을 것입니다. 이론 상으로는 특정 상황에서 작동 할 수 있지만 확실히 올바른 방법은 아닙니다.

아마도 텍스트 편집기에 stdout을 사용하고 싶지는 않지만, 원하는 위치에 텍스트를 놓고 마음대로 업데이트 할 수있는 ncurses과 같은 것이 좋습니다. mmap을 고려할지라도 파일의 실제 내용은 아마도 자신의 내부 버퍼를 통해 가장 잘 관리 될 것입니다.

1

표준 출력은 프로그램의 출력 스트림입니다. 프로그램을 실행하는 환경에 따라이 스트림이 가리키는 위치가 결정됩니다. 콘솔 터미널이나 IDE에서 프로그램을 실행하고있을 것입니다.

콘솔 터미널은 출력을 파일이나 다른 프로그램의 입력으로 리디렉션하도록 지시하지 않는 한 기본적으로 내부적으로 출력을 저장합니다.

동의없이 나중에 쿼리 할 수있는 출력 정보를 제 3 자에게 의탁 할 수 없습니다. 원하는 뷰를 생성하려면 프로그램 내부에 충분한 데이터를 보유해야합니다. 네, 위에서 말했듯이, ncurses와 같은 라이브러리를 사용하면 콘솔 앱을 좀 더 쉽게 만들 수 있습니다.

관련 문제