[완료]stdio buffer의 pointer에 대하여...

superdma의 이미지

#include <stdio.h>
int main(void)
{
	char ch;
        scanf("%c",&ch);  
	return 0;
}

위에 코드를 VS 6.0에서 실행시키고, console로 문자열을 입력받으면
stdio buffer에 입력받은 문자들이 쌓이는 걸로 알고있습니다.

이때 stdio buffer를 가리키는 pointer에 따로 접근하는 방법이 있나요?

예를 들어서 문자열을 입력받은 다음, 다시 scanf를 호출하면 stdio buffer의 pointer가 다음 문자를 가리키도록 이동하는 것은
확인하였습니다. 예를 든 코드는 다음과 같습니다.

#include <stdio.h>
 
int main(void)
{
	char ch;
 
    	scanf("%c",&ch);  
	printf("%c",ch); 
 
	scanf("%c",&ch);  
	printf("%c\n",&ch);
 
	return 0;
}
cinsk의 이미지

질문하신 목적을 모르겠네요. 먼저 질문하신 목적을 말씀하세요.

Windows는 잘 모르겠지만, 일반적으로 버퍼에 쌓인 내용은 프로세스가 끝나면 다 없어지는데, 프로세스가 끝난 다음에도 읽을 수 있냐는 것인가요?

아니면, 버퍼에 쌓인 내용을 지우고 싶다는 것인가요?

--
C FAQ: http://www.eskimo.com/~scs/C-faq/top.html
Korean Ver: http://www.cinsk.org/cfaqs/

superdma의 이미지

프로세스 종료전에, stdio buffer에 있는 문자들에 대해서 자유롭게 접근이 가능한지 알고 싶습니다.
예를 들어 abcd가 들어온다면, stdio buffer의 pointer를 이용해서 마음대로 문자에 접근하는 방식 말입니다.

stdio buffer의 구현에 관한 내용도 찾고 싶은데, 마땅한 키워드가 없네요...

superdma의 이미지

stdio buffer에 pointer라는 개념이 존재합니까? 그런건 어떻게 사용할 수 있는 건가요?...

한 문자씩 읽어 오는것을 보니 , 분명 pointer라는 개념이 존재 할꺼 같아 질문드립니다.

buelgsk8er의 이미지

setbuf()를 써서 user-allocated buffer를 설정하면 버퍼 자체에 대한 접근은 가능하겠습니다만..

그 버퍼의 내용 자체는 구현 나름일테니, stream 상에서의 현재 위치에 해당하는 포인터 같은 것을 얻어내기는 어려울 듯 싶네요

cinsk의 이미지

제가 아는 바로도, 버퍼를 설정하는 setbuf(), setvbuf()를 제외하고, 이 버퍼에 대한 정보를 얻는 것은 불가능합니다. 그리고 buelgsk8er님이 말씀하신 것처럼, 이 버퍼의 내용이 어떻게 쓰일지는 C library 마음입니다.

다만, 비표준 함수를 써서 이 버퍼의 내용을 강제로 비울 수는 있습니다.

#include <stdio_ext.h>
 
void __fpurge(FILE *fp);

--
C FAQ: http://www.eskimo.com/~scs/C-faq/top.html
Korean Ver: http://www.cinsk.org/cfaqs/

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.