jun-wiki

View My GitHub Profile

Posts (Latest 10 updated) :
Read all
Contents:
  1. 과제 목록
    1. 11.7
    2. 11.9
    3. 11.10
      1. 11.10A
      2. 11.10B
    4. 11.11

오늘도 csapp 과제다


과제 목록

[구현] cgi adder 구현
[구현] 숙제 11.6c (930p - csapp)
[구현] 숙제 11.7
[구현] 숙제 11.9
[구현] 숙제 11.10
[구현] 숙제 11.11

2개 클리어했다


11.7

mpg파일 처리 가능하게 구현하는 거라던데

mpg는 더이상 지원하지 않는데서 mp4로 대체 했다

get_filetype

else if (strstr(filename, ".mp4"))
    strcpy(filetype, "video/mp4");

이거 추가하고 html파일에 mp4파일 올리면 끝이다


[구현] 숙제 11.7


11.9

정적 컨텐츠 처리시 사용하는 함수인 mmaprio_readn대신
mallocrio_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


11.10

시키는 것도 참 많다 2개로 나눠놓다니…

11.10A

아까 작성했던 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.10B

실은 하나였다

11.10A 결과 잘 나오는지 확인하는게 과제니까 말이다

클리어

[구현] 숙제 11.10


11.11

사실 숙제 중에서 1~2개 뺴고 다하면 되기에 이건 나중에 하겠다

프록시 해야해서 바쁘다