일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 | 31 |
- Spring
- 42
- pipex
- Born2beroot #42
- nestjs
- 네스트JS
- Daemon
- ecole42
- dockerd
- 데이터중심애플리케이션설계
- 42Seoul
- docker
- Spring-Boot
- data-root
- django #ninja #django-ninja #장고
- Today
- Total
목록분류 전체보기 (95)
혼자 정리
p1.c와 p2.c의 C프로그램 작성한다고 가정. Unix 커맨드 라인에서 컴파일하려면 다음의 명령어 작성. linux> gcc -Og -o p p1.c p2.c gcc는 GCC C 컴파일러를 지칭. -Og옵션은 원본 코드의 전체 구조를 따르는 정도의 최적화를 하는 수준으로 기계어 코드를 생성한다. 더 높은 수준의 최적화 진행시 기존 C 코드의 전체적 구조를 변형시킬 가능성이 존재. 여기서는 학습을 위해 이 옵션을 사용할 것. GCC가 소스 코드를 실행 가능한 코드로 변환하는 과정은 다음과 같다. C _전처리기(preprocesor)_는 소스 코드 내의 #include나 #define 선언 같은 지시자들의 내용을 소스 코드에 삽입해준다. _컴파일러_가 각각의 소스 파일들의 어셈블리 코드 버전인 p1.s와..
컴퓨터는 기계 코드(machine code)를 실행. (로우레벨 오퍼레이션들을 바이트의 일련으로 인코딩한 것) 컴파일러는 프로그래밍 언어에서 기계코드를 생성. GCC는 기계 코드의 텍스트 버전인 어셈블리 코드를 생성. 그 다음 GCC가 어셈블러와 링커를 불러서 실행 가능한 기계 코드를 생성 이번 단원에서는 기계 코드와 사람이 읽을 수 있는 어셈블리 코드에 대해 살펴볼 것. x86-64 기반의 기계 언어를 볼 것.
open 함수 #include 늘 써오던대로 파이프 라인의 끝에 명시한 파일이 없는 경우 생성하므로 기존에 쓰던 플래그에 더해서 O_CREAT플래그를 사용해야할 것 같다. error발생시 -1 반환 close 함수 #include 파일 디스크립터 넘겨주면 fd table에서 descriptor 삭제. open과 맞물려서 사용 fork() 호출시 부모 프로세스와 자식 프로세스 간 파일 디스크립터 테이블 동일하므로 같은 파일에 대해 같은 fd를 가짐. 그렇지만 이는 복사본이므로 한쪽 프로세스에서 close(fd)를 하는 경우에 다른 프로세스에서 닫히지는 않는다. read 함수 #include or or 읽은 만큼 반환, 그 후 eof 만나면 0 반환, 오류시 -1 반환 write 함수 #include 쓴 바..
(Advanced Programming in the UNIX Environment, Rago, Stephen A., Stevens, W. Richard 저. 3판 참조) 책에서 사용하는 헤더 && 자체 에러 함수 apue.h /* * Our own header, to be included before all standard system headers. */ #ifndef _APUE_H #define _APUE_H #define _POSIX_C_SOURCE 200809L #if defined(SOLARIS) /* Solaris 10 */ #define _XOPEN_SOURCE 600 #else #define _XOPEN_SOURCE 700 #endif #include /* some systems still..
https://www.gnu.org/software/bash/manual/html_node/Redirections.html Redirections (Bash Reference Manual) 3.6 Redirections Before a command is executed, its input and output may be redirected using a special notation interpreted by the shell. Redirection allows commands’ file handles to be duplicated, opened, closed, made to refer to different files, and can www.gnu.org https://architectophile.t..

* 저도 처음 해보는 작업이라 아래 적은 글에는 틀린 내용이 있을 수도 있습니다. 또 '왜 그렇게 설정을 하는지'에 대해서는 생략한 부분이 많습니다. 첫번째는 제가 잘 모르는 부분도 많기 때문이고, 두번째는 제가 나중에 다시 설정할 때 빠르게 필요한 부분만 읽기 위해서입니다. 생략한 내용은 보통은 같이 첨부한 링크에 자세한 내용이 있습니다(간혹 없는 경우도,,). 과제 평가 받으실 때에는 어느 정도 필요한 수준만큼은 설명이 필요하므로 이 점 참고해서 아래 쓰여있는 것보다는 더 자세히 공부하시는 것을 추천드립니다. https://github.com/wshloic/born2beroot_correction/blob/master/correction_born2beroot.pdf (평가 받기 전 점검 필수) wsh..
(틀린 내용 있으면 댓글 바랍니다.) 문제 언급 필수 사항 프로토 타입 : int ft_printf(const char *, ...); libc(c 표준 라이브러리)의 printf를 구현해라(허나 man 3 printf를 참고하라는 것을 감안하여 c 표준에 언급되지 않은 Undefined behavior에 대한 부분은 BSD manual의 '구현 방법에 따라 정의된 행동'(Implementation-defined behavior)을 참고하려고 한다. 명시되지 않은 행동(Unspecified behavior)은 할지 안할지 모르겠다..) cspdiuxX의 서식 지정자를 구현해라. '-0.*'의 어떤 플래그 조합도 다룰 수 있어야 하고, minimum width는 모든 서식 지정자와 결합되어 사용될 수 있어..

지금 있는 자리에서 가능하다면 계속 깊게 파고 내려가는 것이 DFS 정점 $v$가 아직 탐색하지 않은 간선을 남겨두고 있다면 남은 간선을 전부 탐색해야 한다. $v$의 모든 간선을 탐색한 후에는 "backtrack"해서 다른 간선을 탐색하러 이동한다. 이 과정을 소스 정점에서 도달 가능한 모든 정점을 확인할 때까지 반복한다. 만약 탐색하지 못한 정점이 남아있다면 DFS는 그 중 하나를 골라서 새로운 소스로 삼고 과정을 다시 반복한다. BFS와 마찬가지로 이미 발견한 정점 $u$의 인접 리스트를 탐색하는 과정에서 정점 $v$를 발견하면 $v$의 직전 노드 속성인 $v. \pi$를 $u$로 기록한다. BFS의 predecessor 서브그래프가 트리를 형성하는 것과 다르게 DFS의 predecessor 서브그..

x = L.head while x ≠ NIL and x.key ≠ ㅏ x = x.next return x 연결 리스트는 객체를 선형 순서로 배열한 자료 구조이다. 배열과 달리 연결 리스트는 각 객체의 포인터를 통해 결정된다. 'doubly linked list' $L$은 'key'와 포인터 변수인 'next'와 'prev'를 특성(attribute)으로 갖는 객체들을 원소로 갖는다. 'singly linked list'인 경우 'prev'포인터가 존재하지 않는다. 리스트의 요소 $x$에 대해 $x.prev$는 $x$ 직전 원소를 가리키고 $x.next$는 $x$ 다음 요소를 가리킨다. $x.prev = NIL$인 경우 $x$는 직후의 요소가 없으므로 마지막 요소이다. 이를 'tail'로 부른다. $L.h..

스택과 큐는 제거 행위로 집합에서 제거될 원소가 미리 명시된 동적 집합의 일종이다. 스택은 후입선출(last-in, first-out; LIFO). 큐는 선입선출(first-in, first-out; FIFO). 구현에 다양한 방법이 있지만 여기서는 배열을 통한 구현을 다룬다. Stacks 스택의 'Insert' 행위는 'Push'라 부르고 'Delete'행위는 'Pop'이라 부른다. 최대 $n$개의 원소를 가진 스택을 배열 $S[1 \cdots n]$으로 구현할 수 있다. '$S.top$'은 가장 최근에 삽입된 원소의 배열에서의 인덱스를 나타내느 $S$의 속성(attribute)이다. 즉, 스택은 원소 $S[1 \cdots S.top]$을 가지고 있고, $S[1]$은 스택 최하단에, $S[S.top]$..