read 사용에 관한 간단한 예인데, 이상한 점이 있어서요.
안녕하세요 여러분^^ 도움을 부탁드립니다.
아래소스는 터미널에서 숫자 여러개를 받아와서 배열에 저장하고자
만들던 것입니다.
그런데... 이프로그램의 출력은 다음과 같습니다.
hgichon@gichon~/Algorithm$ ./token (파일명 입니다.)
10 20 30 40
insert print buffer 10 20 30 40
hgichon@gichon~/Algorithm$
소스대로라면 "insert" 라는 문장이 나온 후에 "10 20 30 40" 입력을 받고
"print buffer 10 20 30 40"을 출력해야 하는 데 왜 거꾸로 될까요?
아래는 소스입니다.
--------------------------------------------------------------------
#include
void readline (char *buf);
main() {
char buf[300];
printf ("insert ");
readline (buf);
printf("print buffer %s", buf);
}
void readline (char *buf) {
int n, counter= 0;
do {
n = read (0, buf, 1);
counter++;
}while (n > 0 && *buf++ != '\n');
}
Re: read 사용에 관한 간단한 예인데, 이상한 점이 있어서요.
stdio 함수들은 버퍼링을 하고 (가득차야 주루룩 나오고)
read는 버퍼링을 안했응게(바리바리 들어가고 나오고) 그렇습니다.
setvbuf(머시머시); 로 stdout 버퍼를 0으로 만들어 버리거나
혹은 fflush(stdout); 해서 stdout 버퍼를 비워버리고
readline하면 순서대로 보입니다.
밑에처럼...
김경표 wrote..
안녕하세요 여러분^^ 도움을 부탁드립니다.
아래소스는 터미널에서 숫자 여러개를 받아와서 배열에 저장하고자
만들던 것입니다.
그런데... 이프로그램의 출력은 다음과 같습니다.
hgichon@gichon~/Algorithm$ ./token (파일명 입니다.)
10 20 30 40
insert print buffer 10 20 30 40
hgichon@gichon~/Algorithm$
소스대로라면 "insert" 라는 문장이 나온 후에 "10 20 30 40" 입력을 받고
"print buffer 10 20 30 40"을 출력해야 하는 데 왜 거꾸로 될까요?
아래는 소스입니다.
------------------------------------------------------------------- -
#include <stdio.h>
void readline (char *buf);
main() {
char buf[300];
printf ("insert ");
1.stdout버퍼를 0으로만든다. 바로 프린트포맷
setvbuf(stdout, (char *)NULL, _IONBF, 0);
2. 일단 버퍼링된 프린트포맷을 싸악 비운다.
fflush(stdout);
readline (buf);
printf("print buffer %s", buf);
}
void readline (char *buf) {
int n, counter= 0;
do {
n = read (0, buf, 1);
counter++;
}while (n > 0 && *buf++ != '\n');
}
Re^2: read 사용에 관한 간단한 예인데, 이상한 점이 있어서요.
그런데, stdio를 쓰는 puts함수의 경우, 정상 순서대로 출력을 하는데요.
printf("insert")를 printf("insert\n")으로 넣어도 정상 순서대로 출력
을 합니다.
stdio의 버퍼를 채우고 안채우고의 문제가 아닌거 같습니다만...
댓글 달기