텍스트출력

jjjjrr의 이미지

너무자주질문드려서 죄송합니다
안녕하세요

#include <stdio.h> 

int main(void) 
{ 


printf("abcdefg"); 
return 0; 
} 
이프로그램을 컴파일하고 실행시키면
abcdefg 이글자가 터미날에 출력되어야되는것 아닌가요
근데저는 아무출력도없이 프로그램을 실행시키면
그냥 프롬프트만그대로 나타납니다
왜 이런가요
어떻게하면 화면에 글자를 출력시킬수잇나요
부탁합니다
wind772의 이미지

저는 잘 나오는데요..^^

[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]$ 

흠....-_-;;

===================================================
중요한건 얼마나 아느냐가 아니라 그것에 대한 열정이다.

jemiro의 이미지

뉴라인을 추가해보시길 아래와 같이...

jjjjrr wrote:
너무자주질문드려서 죄송합니다
안녕하세요
#include <stdio.h> 
int main(void) 
{ 
    printf("abcdefg\n"); 
    return 0; 
}

이프로그램을 컴파일하고 실행시키면
abcdefg 이글자가 터미날에 출력되어야되는것 아닌가요
근데저는 아무출력도없이 프로그램을 실행시키면
그냥 프롬프트만그대로 나타납니다
왜 이런가요
어떻게하면 화면에 글자를 출력시킬수잇나요
부탁합니다
jjjjrr의 이미지

답변감사합니다
jemiro님말씀대로 뉴라인을 추가했더니 출력이되는군요
근데왜그렇죠..?
wind772 님은 뉴라인이 없어도 제대로 출력되는것같은데여
저만 그런이유가 뭔지....
한번더부탁드립니다

고도리의 이미지

printf함수는 버퍼링 함수로 알고 있습니다.

그러니까 일단 버퍼에 다 차야 화면에 뿌리는 형태인가 그럴겁니다.
오래돼서리...가물가물하네요.

안나올때는 fflush(stdout);
이런식으로 해주면 될 겁니다.

함수가 맞나 모르겠네요....에구

그럼.

서명.....음, 서명이라...

아싸!!! Three Go!

초코리의 이미지

printf함수는 라인 단위로 버퍼링을 한다고 알고 있습니다..

고도리님의 말씀 대로 버퍼링을 하기때문에 출력이 되지않는것입니다.

버퍼링을 '\n'같은 뉴라인 문자가 나올때 출력하는것이라고 알고 있습니다.

eungkyu의 이미지

전에도 이런 문제에 대해 말들이 오고갔던 것 같은데, 이건 버퍼링 문제가 아닙니다.

표준 출력이 줄단위 버퍼링을 하든, 더 큰 버퍼링을 하든, 버퍼링을 하지 않든 이건 프로그램이 실행될 때 얘기지, 프로그램이 끝나면 당연히 버퍼링한 것을 비우고 출력을 해줘야 하는 것 입니다.

단순히 프로그램이 끝난 후 쉘 프롬프트의 출력과정에서 줄 앞으로 옮기다가 앞의 글자들을 지운 것 같습니다.

cjy1126의 이미지

일단 printf는 line buffering 맞습니다.

그러나 지금 프로그램은 출력되어야합니다.

왜냐면 프로세스가 버퍼의 내용을 다 안비우고 죽었기때문에 커널이 정리해줘야하죠.

프로세스가 버퍼의 내용을 처리안하고 죽었을때, 커널이 입력버퍼의 내용은 그냥 버리지만 출력버퍼는 출력해주는걸로 알고있습니다.

그리고 test 출력시에는 '\n' new line을 습관화해주세요.

나중에 디버깅할때 출력안되서 엄한데서 고생할 수도 있습니다.

ssoo76의 이미지

이건 아무리 봐두

$ gcc -o test test.c
$ test
$

일듯.....

세상은 하나..........

moonzoo의 이미지

eungkyu 님이 말씀하시것에 한표~

무혼인형의 이미지

확실히 버퍼링 함수가 맞는것 같네요..

간단히 디버깅을 하기 위해서
프로그램 중간 중간에

....
printf("0");
....
printf("1");
....
이런식으로 넣어놨다가.. 원하는 결과가 안나와서 잠깐 고민 했었네요.. 헤에.. :o
eminency의 이미지

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 자체이므로 버퍼링이 중간에 없죠.

ai의 이미지

eungkyu 님께서 말씀하신 내용이 맞습니다. 생성된 a.out 을 실행해보면 아시겠지만

$ ./a.out && echo
abcdefg
$ ./a.out | wc
      0       1       7

제가 사용하는 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.

xfmulder의 이미지

원래 이 글 처음 쓰신 jjjjrr 님이 이유를 알고 계실듯한데..
처리 결과를 알려주세요. 궁금하네요. 도대체 왜 그랬는지?

아직도 printf () 제대로 안되고 있나요?

내 자식들도 나처럼 !!

garuna의 이미지

셀의 버그가 아니라면... 저도 eungkyu 님에게 한 표~

프로그램이 종료되었는데도 버퍼링되고 있을 수 있나요???

댓글 달기

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
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.