Study/Troubleshooting
[C] printf, write 함수에 대해서
혜돌이
2018. 12. 3. 16:44
소켓에서 읽어온 메시지를 write 함수로 출력하고 이어서 printf 함수를 썼을 때 출력 시점과 모양이 이상하게 되는(?) 문제가 발생했다.
write = write(1, buf, read);
...
printf("\nInput Word: ");
실제 출력해보면 개행이 사라지는 등 이상한 .... 현상이 생겼다.
교수님께 여쭤보니, stdout에 출력할 때 write 함수와 printf 함수를 섞어서 사용했기 때문에 발생한 문제라고 하셨다.
또 추가로 찾아보니 write 함수는 버퍼에 있는 내용을 그대로 출력하고 printf 함수는 표준 출력 모드로 동작하여 종료 문자('\n', '\0')를 만났을 때 내용을 출력한다고 한다.
문제를 해결하기 위해서는,
- printf 또는 write 함수 중 하나로 통일해서 사용 (권장)
순서나 출력 모양이 꼬이지 않도록 함수 자체를 통일하면 쓸데없는 문제가 생기지 않음
- printf 함수 사용 후에 flush(stdout);으로 버퍼를 비워줌
printf 함수를 쓴 다음 버퍼를 비워줌으로써 종료 문자를 만나지 않았더라도 내용을 바로 출력하도록 함
이 두 방법 중 하나를 사용하면 된다.
-
소켓 프로그래밍 하느라 넘넘 고생중이었는데...
교수님이 엄청 엄청 엄청 엄청 엄청 도와주시고 떠먹여주시고 ...
교수님은 천사에다 천재가 분명하다
흑흑흑 감사해요 교수님 ...