5개 함수 open, read, write, lseek, close 다중 프로세스 dup, fcntl, ioctl File Descriptors 파일 열거나 새로 생성시 커널은 file descriptor을 프로세스에 리턴한다 파일 읽거나 작성할 때 파일 읽거나 생
fcntl
section 구분1\. 실행가능한 프로그램이나 셸 명령어2\. 시스템 콜3\. 라이브러리 함수4\. 특별한 파일들(디바이스 파일 등)5\. 파일 포맷6\. 게임7\. 규격 등8\. 시스템 관리용 명령어$man 3 strlen다른 프로그램들과 링크되기 위하여 존재하는,
\-o -o 플래그 뒤에 콤마로 분리한 옵션을 적어준다. 이들 중 몇몇은 /etc/fstab 화일에서만 사용할 수 있다. 다음 옵션들은 마운트될 어떤 화일 시스템에서든 사용할 수 있는 것이다:
리눅스의 셸은 명령어와 프로그램을 실행할 때 사용하는 인터페이스로 사용자로부터 명령을 받아 그것을 해석하고 프로그램을 실행하는 역할을 한다.안터페이스다른 클래스를 작성할 때 기본이 되는 틀을 제공하면서, 다른 클래스 사이의 중간 매개 역할까지 담당하는 일종의 추상 클래
모든 디렉토리는 루트(Root, /)디렉토리를 기반으로 bin, boot, dev 등의 디렉토리를 생성한다.dev는 주변장치와 관련된 장치정보를 가진다.예를 들어 CDROM, USB, Printer등과 같은 장치 파일 시스템이 있다.실행중인 리눅스 정보를 가지는 디렉토
프로세스에서 메모리는 해당 프로세스만이 사용하는 것이 일반적이다.메모리에는 명령어, 지역변수, 동적 변수, 전역 변수와 같이 데이터가 존재하는데 그 프로세스만 접근할 수 있고 변경가능합니다.이 데이터를 다른 프로세스에서 쓰일 수 있도록 만들 수 있는데 이를 공유메모리라
E2BIG: 너무 긴 인수 목록EACCESS: 접근 거부 EAGAIN: 재시도 EBADF: 잘못된 파일 번호 EBUSY: 이미 사용중인 디바이스나 자원 ECHILD: 자식 프로세스 없음EDOM: 함수 영역을 넘어선 수학 인수 EEXIST: 이미 존재하는 파일 EFAUL
물리 디스크 상의 파일, 장치들을 통일된 방식으로 다루기 위한 가상적인 개념따라서 스트림은 어디서 나왔는지 어디로 가는지 신경 쓸 필요없이 자유롭게 어떤 장치 및 프로세스, 파일들과 연결될 수 있어 많은 편리성 제공FILE 타입: 스트림을 다룰 때 사용하는 자료구조ST
return: 성공시 해당 정숫값, 실패/str에 정수가 포함되어있지 않은 경우 0getopt는 항상 루프와 함께 사용호출될 때마다 인자로 넘겨진 다음 옵션 문자를 반환잘못된 옵션일 경우 ? return인자로 넘겨진 모든 옵션을 반환하면 -1 returnargc, a
pattern으로 넘어온 정규 표현식 문자열을 전용 데이터 형식 regex_t로 변환하여 첫번째 인자인 reg에 저장return 성공하면 0반환하고, 실패하면 에러코드를 반환첫번째 인자 reg의 메모리 영역은 호출하기 전에 할당하여 그 포인터를 전달해야하는데, 그 외에
함수를 호출할 때 전달하는 인자는 변수 자체를 전달하는 것이 아니라, 변수에 저장된 값을 전달합니다.그리고 서브 함수 내에서 별도의 변수를 만들어 값을 담아서 사용하게 된다.즉 main()에서의 value와 call_by_value()의 val 변수는 서로 다른 메모리
DIR 타입은 디렉터리를 읽어 들이기 위한 스트림을 관리하는 구조체path로 지정한 디렉터리를 읽기 위해 open하고 DIR 타입에 대한 포인터를 반환디렉터리 스트림 d로부터 엔트리를 하나씩 읽어 들여 struct dirent(DIRectory ENTry)타입으로 반환
메모리 매핑은 파일을 프로세스의 메모리에 매핑하는 것즉, 프로세스에 전달한 데이터를 저장한 파일을 직접 프로세스의 가상 주소 공간(논리 주소)으로 매핑하는 것따라서 read나 write함수를 사용하지 않고도 프로그램 내부에서 정의한 변수를 사용해 파일에서 데이터를 읽거
프로세스 그룹은 관련있는 프로세스를 묶은 것(하나 또는 그 이상의 프로세스들의 모임)프로세스 그룹 ID를 부여받음(PGID)프로세스 그룹을 구성하는 프로세스 중 하나가 그룹 리더가 되고, 프로세스 그룹 리더의 PID = PGID가 된다.프로세스의 그룹 리더는 변경될 수
static void do_exit(const char \*s);int main(){ int r, m, i, j; int childstatus;}static void do_exit(const char \*s){ perror(s);
프로그램의 세그먼트 폴트 등의 비정상적인 종료가 발생하는 경우 커널에서 해당 프로세스와 관련된 메모리를 덤프시킨 파일이 파일을 가지고 디버깅하여 문제의 원인을 찾을 수 있다.코어 덤프의 코어는 메모리를 가리킨다.오래전의 컴퓨터는 자기 코어라는 것으로 만든 코어 메모리를
발생 C 라이브러리 매크로ERANGE는 errno는 ERANGE로 설정 될 때 수학적 함수에 의해 정의 된 입력 매개 변수의 범위를 벗어나, 오차의 범위를 나타낸다.
부호없는 32비트 수치, 사람이 보기 쉽도록 8비트 숫자(0~255) 네개로 분할하여 '192.168.1.3'과 같이 표현16비트 부호 없는 숫자(0~65535)하나의 호스트가 하나의 기차역이라고 생각한다면, 포트 번호는 역의 선로에 해당하나의 역에서 여러대의 열차가
단일 프로세스는 각 파일의 디스크립터를 분리해서 서비스하는 스레드 없이는 동시에 하나 이상의 파일 디스크립터를 블록할 수 없다.다중 입출력은 애플리케이션이 여러개의 파일 디스크립터를 동시에 블록하고 그중 하나라도 블록되지않고 읽고 쓸 준비가 되면 알려주는 기능을 제공\
status에 사용 가능한 매크로WIFEXITED(status): 자식 프로세스가 정상적으로 종료된 경우 trueWEXITESTATUS(status): exit()의 인자에서 하위 8비트 값을 리턴WIFSIGNALED(status): 자식 프로세스가 시그널을 받아 비정
char str\[] = "Hello, world"H e l l o , w o r l d \\0/0은 문자열 끝에 자동적으로 붙는 특수 문자이다./0으로 인해 문자열의 길이도 자동적으로 + 1이다.
단일 프로세스 내에서 실행 유닛을 여러 개 생성하고 관리하는 작업스레딩은 data-race(데이터 경쟁) 상태와 데드락을 통해 어마어마한 프로그래밍 에러를 발생시키는 원인바이너리저장장치에 기록되어있는 프로그램특정 운영체제와 머신 아키텍처에서 접근할 수 있는 형식으로 컴
메모리는 비트로 표현하며 보통 1byte가 8bit워드는 byte로 구성, 페이지는 워드로 구성페이지: 메모리 관리 유닛에서 관리할 수 있는 최소 단위가상주소공간은 페이지로 구성32bit에서는 4KB, 64bit에서는 8KB유효한 페이지는 물리메모리 또는 스왑 파티션이
구조체의 정렬 요구사항은 가장 큰 멤버의 타입을 따른다.ex) 구조체에서 가장 큰 타입이 32비트 정수이고 4바이트 단위로 정렬된다면 이 구조체 역시 4바이트 단위로 정렬되어야한다.구조체는 각 멤버가 그 타입의 요구사항에 맞게 적절히 정렬될 수 있도록 패딩(채워넣기)이
IPC는 프로세스간 데이터 이동이다.ex) 웹브라우저가 웹서버에서 웹페이지를 요청할 때 HTML 데이터를 전송한다.이 데이터 이동은 대부분 소켓을 이용한다.ex) $ ls | lpr셸은 | 기호로 표현되는 파이프로 두 개를 연결하는 ls 프로세스와 별도의 lpr 프로세
PC기법 중 하나인 메시지큐는 Data Structure 중 큐를 사용기본적으로는 먼저온 메시지가 먼저 꺼내어진다.메시지큐의 msgtype에 따라 특정 메시지 중 가장 먼저들어온 메시지도 받아올 수 있다.이 메시지는 커널에서 보관하고 있으니 프로세스가 종료되어도 사라지
https://1d1cblog.tistory.com/375filedir.cinout.csem.cshm.cth.hthread.cmain.cmakefile
main.cshm.c
맨 왼쪽 tcp dump는 BPF(BSD Packet Filter)이나 DLPI(Data Link Provider Interface)을 이용해서 datalink layer로 직접 통신32bit addressProvide packet delivery service for
대부분의 socket 함수들은 매개변수로 socket address structure의 포인터를 요구sockaddr_in 구조체sin_len은 4.3BSD-Reno에서 추가되었다. 이전에는 첫번째 멤버는 sin_family였다.Posix.1g에는 이 멤버를 필요로 하지
4장에서는 TCP 서버/클라이언트를 구축하는데 필요한 기본 소켓 함수들을 다루고 있다. 4장에서 기본 소켓 함수들을 예시를 들어서 설명 후, 5장에서 TCP 서버/클라이언트를 점진적으로 개선한다.어떤 프로토콜을 이용해서 통신을 하고 싶은지 명시하면서 socket() 호
2 byte(short)나 4byte (int) 경우에는 htons(), htonl() 이나 ntohs(), ntohl() 을 사용8byte(64bit에서)는 아직까지는 직접 만들어 사용left shift 연산자 <<비트값을 주어진 숫자만큼 왼쪽으로 이동 시
REST API Server 개발POST, GET, DELETE method 구현GET IP:port/users/{user_id} 로 특정 USER의 정보 조회GET IP:port/users 모든 USER 리스트 조회(USER ID만)POST IP:port/users
비교header lengthIPv4에서 header의 크기가 최소 20bytes 에서 최대 60bytes이처럼 IPv4 header 크기는 가변적이기 때문에 꼭 필요했다.하지만 IPv6 header의 크기는 고정(320bit)이기 때문에 더 이상 header lengt
UDP/IP는 TCP/IP 처럼 클라이언트와 서버로 나뉘고 1 대 다수의 통신 방식은 아니고 그냥 목적 시스템으로 자료를 전송하면 되는데, 문제는 UDP/IP를 이용하여 자료를 수신 받아야 하는 쪽은 받을 준비를 해야 한다.TCP/IP처럼 한번 연결되면 연결된 시스템과
https://www.crocus.co.kr/462
\[node.js REST API 서버 만들기] 3. 만들기링크텍스트Ulfius HTTP Framework
데이터와 기능의 집합을 제공하여 컴퓨터 프로그램간 상호작용을 촉진하며, 서로 정보를 교환가능 하도록 하는 것REST 기반으로 서비스 API를 구현한 것GET 요청을 사용하여 레코드를 검색POST 요청을 사용하여 레코드를 작성PUT 요청을 사용하여 레코드를 업데이트DEL
디렉토리 생성return: 성공시 0, 실패시 -1path: 생성할 디렉토리 이름mode: 접근 권한 지정디렉토리 삭제return: 성공시 0, 실패시 -1path: 삭제할 디렉토리 이름UNIX/LINUX에서는 directory를 삭제하는 함수는 rmdir(2)이 있다
읽어들인 JSON type의 데이터를 파싱함JSON type의 데이터에서 object를 추출json object에서 정수값을 추출json object에서 string값을 추출array type의 json object에서 값을 추출
fork 예제
fread로 21바이트만큼 읽으면?fread(buffer, 21, 1, fp);처럼 buffer의 크기보다 큰 값인 21로 읽으면 어떻게 될까요? 문제없이 "hello, world!" 문자열이 읽어집니다. fread는 버퍼 크기와는 상관없이 파일에서 읽을 수 있는 최대
HTTP 1.1 request 규격(https://datatracker.ietf.org/doc/html/rfc2616The Request-Line begins with a method token, followed by the Request-URI and the
result = recv( , , , );일반적인 소켓 에러 상황이거나errno가 EWOULDBLOCK == EAGAIN인 경우에는 recv 시도했으나 읽을 것이 없다는 뜻select나 epoll_wait에서 해당 fd에 대해서 이벤트가 발생했더라도 바로 recv가