[SW_Jungle] week 07 Tiny web server 분석 - sprintf와 printf의 차이
버퍼(buffer, 문화어: 완충기억기)는 데이터를 한 곳에서 다른 한 곳으로 전송하는 동안 일시적으로 그 데이터를 보관하는 메모리의 영역
sprintf : buffer 라는 메모리 공간에 출력
printf : 표준입출력으로 모니터에 출력
Tiny webserver 에서 발췌한 내용으로 정적 컨텐츠에 대한 내용을 처리해 주는 부분의 일부이다.
void serve_static(int fd, char *filename, int filesize, char *method) {
int srcfd;
char *srcp, filetype[MAXLINE], buf[MAXBUF], *fbuf;
/* Send response headers to client */
get_filetype(filename, filetype);
sprintf(buf, "HTTP/1.0 200 OK\r\n");
sprintf(buf, "%sServer: Tiny Web Server\r\n", buf);
sprintf(buf, "%sConnection: close\r\n", buf);
sprintf(buf, "%sContent-length: %d\r\n", buf, filesize);
sprintf(buf, "%sContent-type: %s\r\n\r\n", buf, filetype);
/* writen = client(텔넷)에서 출력됨*/
Rio_writen(fd, buf, strlen(buf));
/* 서버 쪽에 출력 */
printf("Response headers:\n");
printf("%s", buf);
if (!strcasecmp(method, "HEAD"))
return;
}
7번째 줄이 완료된 시점의 buf는 HTTP/1.0 200 OK\r\n
8번째 줄이 완료된 시점의 buf 에는 7번째 줄에서 완료된 HTTP/1.0 200 OK\r\n가 들어있는 상태에 HTTP/1.0 200 OK\r\nServer: Tiny Web Server\r\n를 덮어쓴다.
이런 과정이 반복 되어
7~11 번째 줄이 완료된 시점의 buf는 HTTP/1.0 200 OK\r\nServer: Tiny Web Server\r\nConnection: close\r\nContent-length: filesize\r\nContent-type: filetype\r\n\r\n 이 들어 있게 된다.
하지만 이는 눈에 보이지 않는데 sprintf를 사용해 버퍼에 출력했기 때문이다.
우리가 눈으로 buf에 담겨있는 string을 볼 수있는 시점은 18번째 줄에 printf가 실행되는 시점이다.
ref
1. https://dojang.io/mod/page/view.php?id=352
Author And Source
이 문제에 관하여([SW_Jungle] week 07 Tiny web server 분석 - sprintf와 printf의 차이), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@jinlee/SWJungle-week-07-Tiny-web-server-분석-sprintf와-printf의-차이저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)