너무자주질문드려서 죄송합니다 안녕하세요
#include <stdio.h> int main(void) { printf("abcdefg"); return 0; }
저는 잘 나오는데요..^^
[wind772@Test tmp]$ cat test.c #include <stdio.h> int main(void) { printf("abcdefg"); return 0; } [wind772@Test tmp]$ gcc test.c [wind772@Test tmp]$ ./a.out abcdefg[wind772@Test tmp]$
흠....-_-;;
=================================================== 중요한건 얼마나 아느냐가 아니라 그것에 대한 열정이다.
뉴라인을 추가해보시길 아래와 같이...
너무자주질문드려서 죄송합니다 안녕하세요 #include <stdio.h> int main(void) { printf("abcdefg\n"); return 0; } 이프로그램을 컴파일하고 실행시키면 abcdefg 이글자가 터미날에 출력되어야되는것 아닌가요 근데저는 아무출력도없이 프로그램을 실행시키면 그냥 프롬프트만그대로 나타납니다 왜 이런가요 어떻게하면 화면에 글자를 출력시킬수잇나요 부탁합니다
#include <stdio.h> int main(void) { printf("abcdefg\n"); return 0; }
답변감사합니다 jemiro님말씀대로 뉴라인을 추가했더니 출력이되는군요 근데왜그렇죠..? wind772 님은 뉴라인이 없어도 제대로 출력되는것같은데여 저만 그런이유가 뭔지.... 한번더부탁드립니다
printf함수는 버퍼링 함수로 알고 있습니다.
그러니까 일단 버퍼에 다 차야 화면에 뿌리는 형태인가 그럴겁니다. 오래돼서리...가물가물하네요.
안나올때는 fflush(stdout); 이런식으로 해주면 될 겁니다.
함수가 맞나 모르겠네요....에구
그럼.
서명.....음, 서명이라...
아싸!!! Three Go!
printf함수는 라인 단위로 버퍼링을 한다고 알고 있습니다..
고도리님의 말씀 대로 버퍼링을 하기때문에 출력이 되지않는것입니다.
버퍼링을 '\n'같은 뉴라인 문자가 나올때 출력하는것이라고 알고 있습니다.
전에도 이런 문제에 대해 말들이 오고갔던 것 같은데, 이건 버퍼링 문제가 아닙니다.
표준 출력이 줄단위 버퍼링을 하든, 더 큰 버퍼링을 하든, 버퍼링을 하지 않든 이건 프로그램이 실행될 때 얘기지, 프로그램이 끝나면 당연히 버퍼링한 것을 비우고 출력을 해줘야 하는 것 입니다.
단순히 프로그램이 끝난 후 쉘 프롬프트의 출력과정에서 줄 앞으로 옮기다가 앞의 글자들을 지운 것 같습니다.
일단 printf는 line buffering 맞습니다.
그러나 지금 프로그램은 출력되어야합니다.
왜냐면 프로세스가 버퍼의 내용을 다 안비우고 죽었기때문에 커널이 정리해줘야하죠.
프로세스가 버퍼의 내용을 처리안하고 죽었을때, 커널이 입력버퍼의 내용은 그냥 버리지만 출력버퍼는 출력해주는걸로 알고있습니다.
그리고 test 출력시에는 '\n' new line을 습관화해주세요.
나중에 디버깅할때 출력안되서 엄한데서 고생할 수도 있습니다.
이건 아무리 봐두
$ gcc -o test test.c $ test $
일듯.....
세상은 하나..........
eungkyu 님이 말씀하시것에 한표~
확실히 버퍼링 함수가 맞는것 같네요..
간단히 디버깅을 하기 위해서 프로그램 중간 중간에
.... printf("0"); .... printf("1"); ....
----http://poorpuppet.egloos.com
PS1=''
..을 실행하신 후 프로그램을 실행해 보시면 잘 나올겁니다 -_- 즉, 버퍼링 함수이긴 하지만 결론적인 이유는... eungkyu님 의견에 한 표 -_-
노루가 사냥꾼의 손에서 벗어나는 것 같이, 새가 그물치는 자의 손에서 벗어나는 것 같이 스스로 구원하라 -잠언 6:5
printf (" ABCDEF"); fflush(stdout);
이렇게 fflush를 활용해보세요.
Systemcall 자체에서는 버퍼링을 하지는 않지만
fprintf/printf 에서는 이를 '\n' 까지 버퍼링을 합니다.
정확히는 '\n' 을 만나면 내부적으로 fflush를 호출한다고 이해하시면 될듯.
fflush를 사용하기 귀찮으신분은 다음과 같은 방법이 있습니다.
void MyPuts(const char *s_String) { write(1, s_String, strlen(s_String)); }
write 함수는 Systemcall 자체이므로 버퍼링이 중간에 없죠.
eungkyu 님께서 말씀하신 내용이 맞습니다. 생성된 a.out 을 실행해보면 아시겠지만
$ ./a.out && echo abcdefg $ ./a.out | wc 0 1 7
참고하세요.http://kldp.org/~eunjea/hcol-archive/2001/misc/2001-Jun/0351.htmlhttp://www.mandrakesecure.net/en/advisories/advisory.php?name=MDKA-2001:005
War doesnt determine whos right, just whos left.
원래 이 글 처음 쓰신 jjjjrr 님이 이유를 알고 계실듯한데.. 처리 결과를 알려주세요. 궁금하네요. 도대체 왜 그랬는지?
아직도 printf () 제대로 안되고 있나요?
내 자식들도 나처럼 !!
셀의 버그가 아니라면... 저도 eungkyu 님에게 한 표~
프로그램이 종료되었는데도 버퍼링되고 있을 수 있나요???
텍스트 포맷에 대한 자세한 정보
<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]
저는 잘 나오는데요..^^[code:1][wind772@T
저는 잘 나오는데요..^^
흠....-_-;;
===================================================
중요한건 얼마나 아느냐가 아니라 그것에 대한 열정이다.
Re: 텍스트출력
뉴라인을 추가해보시길 아래와 같이...
뉴라인을 추가했더니 출력이되는군요
답변감사합니다
jemiro님말씀대로 뉴라인을 추가했더니 출력이되는군요
근데왜그렇죠..?
wind772 님은 뉴라인이 없어도 제대로 출력되는것같은데여
저만 그런이유가 뭔지....
한번더부탁드립니다
buffering함수
printf함수는 버퍼링 함수로 알고 있습니다.
그러니까 일단 버퍼에 다 차야 화면에 뿌리는 형태인가 그럴겁니다.
오래돼서리...가물가물하네요.
안나올때는 fflush(stdout);
이런식으로 해주면 될 겁니다.
함수가 맞나 모르겠네요....에구
그럼.
서명.....음, 서명이라...
아싸!!! Three Go!
printf함수는 라인 단위로 버퍼링을 한다고 알고 있습니다..고
printf함수는 라인 단위로 버퍼링을 한다고 알고 있습니다..
고도리님의 말씀 대로 버퍼링을 하기때문에 출력이 되지않는것입니다.
버퍼링을 '\n'같은 뉴라인 문자가 나올때 출력하는것이라고 알고 있습니다.
버퍼링 문제가 아닙니다...
전에도 이런 문제에 대해 말들이 오고갔던 것 같은데, 이건 버퍼링 문제가 아닙니다.
표준 출력이 줄단위 버퍼링을 하든, 더 큰 버퍼링을 하든, 버퍼링을 하지 않든 이건 프로그램이 실행될 때 얘기지, 프로그램이 끝나면 당연히 버퍼링한 것을 비우고 출력을 해줘야 하는 것 입니다.
단순히 프로그램이 끝난 후 쉘 프롬프트의 출력과정에서 줄 앞으로 옮기다가 앞의 글자들을 지운 것 같습니다.
무슨 문제일까요?
일단 printf는 line buffering 맞습니다.
그러나 지금 프로그램은 출력되어야합니다.
왜냐면 프로세스가 버퍼의 내용을 다 안비우고 죽었기때문에 커널이 정리해줘야하죠.
프로세스가 버퍼의 내용을 처리안하고 죽었을때, 커널이 입력버퍼의 내용은 그냥 버리지만 출력버퍼는 출력해주는걸로 알고있습니다.
그리고 test 출력시에는 '\n' new line을 습관화해주세요.
나중에 디버깅할때 출력안되서 엄한데서 고생할 수도 있습니다.
이건 아무리 봐두
이건 아무리 봐두
$ gcc -o test test.c
$ test
$
일듯.....
세상은 하나..........
한표.
eungkyu 님이 말씀하시것에 한표~
확실히 버퍼링 함수가 맞는것 같네요..간단히 디버깅을 하기 위해서
확실히 버퍼링 함수가 맞는것 같네요..
간단히 디버깅을 하기 위해서
이런식으로 넣어놨다가.. 원하는 결과가 안나와서 잠깐 고민 했었네요.. 헤에.. :o프로그램 중간 중간에
----
http://poorpuppet.egloos.com
[code:1]PS1=''[/code:1] ..을 실행하신 후
PS1=''
..을 실행하신 후 프로그램을 실행해 보시면 잘 나올겁니다 -_-
즉, 버퍼링 함수이긴 하지만 결론적인 이유는... eungkyu님 의견에 한 표 -_-
노루가 사냥꾼의 손에서 벗어나는 것 같이, 새가 그물치는 자의 손에서 벗어나는 것 같이 스스로 구원하라 -잠언 6:5
printf (" ABCDEF");fflush(stdout);
printf (" ABCDEF");
fflush(stdout);
이렇게 fflush를 활용해보세요.
Systemcall 자체에서는 버퍼링을 하지는 않지만
fprintf/printf 에서는 이를 '\n' 까지 버퍼링을 합니다.
정확히는 '\n' 을 만나면 내부적으로 fflush를 호출한다고 이해하시면 될듯.
fflush를 사용하기 귀찮으신분은 다음과 같은 방법이 있습니다.
fflush를 사용하기 귀찮으신분은 다음과 같은 방법이 있습니다.
write 함수는 Systemcall 자체이므로 버퍼링이 중간에 없죠.
eungkyu 님께서 말씀하신 내용이 맞습니다. 생성된 a.out 을 실
eungkyu 님께서 말씀하신 내용이 맞습니다. 생성된 a.out 을 실행해보면 아시겠지만
제가 사용하는 bash 에서도 비슷한 문제가 있었던 적이 있습니다. 지금에야 패치된 버전을 사용하고 있으니 괜찮지만 처음 mdk8 을 설치하고서는 당황했었죠. 문제가 되었던 rpm 은 bash-2.04-18mdk 이고, bash-2.05-2mdk 에 와서 해결되었습니다.
참고하세요.
http://kldp.org/~eunjea/hcol-archive/2001/misc/2001-Jun/0351.html
http://www.mandrakesecure.net/en/advisories/advisory.php?name=MDKA-2001:005
War doesnt determine whos right, just whos left.
원래 이 글 처음 쓰신 jjjjrr 님이 이유를 알고 계실듯한데..처
원래 이 글 처음 쓰신 jjjjrr 님이 이유를 알고 계실듯한데..
처리 결과를 알려주세요. 궁금하네요. 도대체 왜 그랬는지?
아직도 printf () 제대로 안되고 있나요?
내 자식들도 나처럼 !!
셀의 버그가 아니라면...
셀의 버그가 아니라면... 저도 eungkyu 님에게 한 표~
프로그램이 종료되었는데도 버퍼링되고 있을 수 있나요???
댓글 달기