목록전체 글 (94)
혼자 정리
컴퓨터는 기계 코드(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]$..
그래프를 $G= (V, E)$라 하면 $V$는 정점(vertice)의 집합, $E$는 간선(Edge)의 집합을 의미한다. $|V|$는 정점의 갯수, $|E|$는 간선의 갯수를 의미. 점근적 표기에서 $V$는 $|V|$를 의미하고, $E$는 $|E|$를 의미한다. 즉, $O(VE)$는 $O(|V||E|)$의 의미로 사용된다. 또한, 수도 코드에서는 그래프 $G$의 정점 집합을 $G.V$로, 간선 집합은 $G.E$로 표기한다. 즉, 수도 코드에서는 정점과 간선을 그래프의 속성으로 본다. undirected graph : 간선에 방향이 없는 그래프를 의미. $u,v \in V$를 잇는 간선을 $(u,v)$와 $(v, u)$로 나타낼 수 있다면 두 표현이 같은 간선을 나타낸다.(간선 하나는 정점의 집합으로 이루..