소켓 프로그래밍 도중 궁금한 것이 생겨 질문드립니다.
글쓴이: ddt3wok / 작성시간: 수, 2018/11/28 - 7:40오후
안녕하세요 ? 평소 검색을 통해 본 커뮤니티 페이지에서 도움을 많이 얻고 있는 대학생입니다.
이번에 제가 학교 과제로 socket programming 에 대해 공부 중인데 관련 내용을 어떻게 검색해야할지 몰라 글을 남기게 되었습니다.
궁금한 것은
아래의 코드 실행결과가
-----------------------
filedata : ~~
bind()error!
end34411
-----------------------
인데
제 생각에는
-----------------------
filedata : ~~
end
bind()error!
34411
-----------------------
과 같이 되어야 하는데 말이죠 !
그런데 printf("end")가 printf("end\n")로 수정되면 제 생각과 같은 결과를 얻을 수 있습니다.
왜 그런지 도무지 모르겠습니다ㅠㅠ 도와주세요 ! (__)
void error_handling(char * message) { fputs(message,stderr); fputc('\n',stderr); exit(1); } void getFile(char * filename) { char buf[100]; int fd = open(filename,O_RDONLY); if (fd == -1) { error_handling("open() error!"); } printf("file descripyer: %d \n",fd); if(read(fd,buf,sizeof(buf))==-1) error_handling("read() error!"); printf("file data : %s",buf); printf("end"); close(fd); } int main() { int serv_sock; int clnt_sock; struct sockaddr_in serv_adr, clnt_adr; getFile("pw.txt"); printf("34411"); serv_sock = socket(PF_INET, SOCK_STREAM,0); if(bind(serv_sock, (struct sockaddr*)&serv_adr, sizeof(serv_adr))==-1) { error_handling("bind() error!"); } }
Forums:
코드를 조금 바꾸어
을
로 바꾸면 어떻게 되나요?
감사합니다 ^_^
그렇게 하니까 제가 원하는 결과가 나오네요 ! 이유는 아랫분께서 설명해주셨습니다. 답변감사합니다.(_ _)
좋은 하루 보내세요 !
printf 는 stdout으로 출력을 내보내고,
printf 는 stdout으로 출력을 내보내고, stdout은 기본적으로 버퍼를 사용합니다.
명시적으로 flush를 하거나 -> fflush(stdout);
stderr를 써서 출력하거나 -> fprintf(stderr, "bind() error!");
또는 "\n"을 사용하셨듯 printf에서 new line을 만나거나 하면 버퍼에 있는게 console로 찍힙니다.
아래 내용들을 참고하세요.
https://stackoverflow.com/questions/1716296/why-does-printf-not-flush-after-the-call-unless-a-newline-is-in-the-format-strin
http://yunzo.tistory.com/1
Signature :) - "여유를 갖고 행동하되 게을러지지 말자"
감사합니다^_^
getchar() 를 이용하여 버퍼를 비우는 방법도 사용해봤는데 아마도 제 의도(버퍼 비우기)대로 동작하지 않았나봅니다.
답변 감사드립니다 (_ _) 덕분에 한걸음 더 성장했습니다. 좋은 하루 보내세요 !!
댓글 달기