오늘도 csapp 과제다
[구현] cgi adder 구현
[구현] 숙제 11.6c (930p - csapp)
[구현] 숙제 11.7
[구현] 숙제 11.9
[구현] 숙제 11.10
[구현] 숙제 11.11
2개 클리어했다
mpg
파일 처리 가능하게 구현하는 거라던데
mpg
는 더이상 지원하지 않는데서 mp4
로 대체 했다
걍 get_filetype
에
else if (strstr(filename, ".mp4"))
strcpy(filetype, "video/mp4");
이거 추가하고 html
파일에 mp4
파일 올리면 끝이다
[구현] 숙제 11.7
정적 컨텐츠 처리시 사용하는 함수인 mmap
과 rio_readn
대신
malloc
과 rio_readn
, rio_writen
을 사용하란다
rio_readn
은 그대로인 거 보니 mmap
만 잘 대체해주면 될 듯 하다
걍 srcp
대신 buf
포인터 선언해준 뒤
filesize
만큼 malloc
해주고 해제하는 걸로 해결 봤다
말 그대로 mmap
대신 malloc
으로 바꾸기만 했다
void serve_static(int fd, char *filename, int filesize)
{
int srcfd;
char *buf, filetype[MAXLINE], buf[MAXBUF];
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);
Rio_writen(fd, buf, strlen(buf));
printf("Response headers:\n");
printf("%s", buf);
srcfd = Open(filename, O_RDONLY, 0);
// srcp = Mmap(0, filesize, PROT_READ, MAP_PRIVATE, srcfd, 0); 기존 mmap
buf = (char *)Malloc((size_t)filesize); // malloc으로 mmap대체
ssize_t n = Rio_readn(srcfd, buf, (size_t)filesize);
Close(srcfd);
Rio_writen(fd, buf, filesize);
// Munmap(srcp, filesize); 기존 munmap
Free(buf); // malloc에 걸맞는 free
}
[구현] 숙제 11.9
시키는 것도 참 많다 2개로 나눠놓다니…
아까 작성했던 CGI adder를 html에 구현해 놓으라고 한다
텍스트 상자 2개에 값 넣어 나오게 말이다
걍 html에서 더하는 거 추가했다
<form method="get" action="/cgi-bin/adder">
<label>
x:
<input type="number" name="x" required />
</label>
<br/>
<label>
y:
<input type="number" name="y" required />
</label>
<br/>
<button type="submit">Add</button>
</form>
실은 하나였다
11.10A 결과 잘 나오는지 확인하는게 과제니까 말이다
클리어
[구현] 숙제 11.10
사실 숙제 중에서 1~2개 뺴고 다하면 되기에 이건 나중에 하겠다
프록시 해야해서 바쁘다