. 'C언어' 태그의 글 목록
본문 바로가기

C언어3

[PintOS, Project2] System Call 0. System Call이란? 시스템 콜은 사용자가 커널 영역에 접근하고 싶을 때, 원하는 목적을 대신해서 작업하는 프로그래밍 인터페이스이다. 그렇기 때문에 시스템 콜은 커널 모드에서 실행되고, 작업 후 사용자 모드로 복귀한다. PintOS에서는 이를 시스템 콜 핸들러를 통해 시스템 콜 (halt, exit, create, remove)를 호출한다. 시스템 콜을 호출할 때, 원하는 기능에 해당하는 시스템 콜 번호를 rax에 담는다. 그리고 시스템 콜 핸들러는 rax의 숫자로 시스템 콜을 호출하고, 해당 콜의 반환값을 다시 rax에 담아서 intr frame(인터럽트 프레임)에 저장한다. 1. Syscall Handler @/userprog/syscall.c /* The main system call i.. 2021. 2. 17.
[C언어, 웹서버] Echo 클라이언트 (작성 중) Echo 클라이언트는 서버와의 연결을 수립한 이후에 클라이언트는 표준 입력에서 텍스트 줄을 반복해서 읽는 루프에 진입하고, 서버에 텍스트 줄을 전송, 서버에서 echo 줄을 읽어서 그 결과를 표준 출력으로 인쇄한다. Echo의 메인 함수는 아래와 같다. #include "csapp.h" int main(int argc, char **argv) { int clientfd; char *host, *port, buf[MAXLINE]; rio_t rio; if (argc != 3) { fprintf(stderr, "usage: %s \n", argv[0]); exit(0); } host = argv[1]; port = argv[2]; clientfd = Open_clientfd(host, port); Rio_r.. 2021. 2. 1.
[C언어, 웹서버] open_clientfd / listen_clientfd 이번 시간에는 그림 1의 왼편에 나타나있는 open_clientfd를 알아보겠다. open_clientfd는 getaddrinfo부터 connect까지 담당해주는 파일이다. 우선 개요는 다음과 같다. #include "csapp.h" int open_clientfd(char *hostname, char *port); Returns: descriptor if OK, −1 on error 이 함수는 호스트명;char hostname 을 사용하는 클라이언트가 서버 포트;char port 와 연결하고, 클라이언트 디스크립터를 반환한다. 함수의 상세 코드는 다음과 같다. int open_clientfd(char *hostname, char *port) { int clientfd; struct addrinfo hi.. 2021. 1. 24.