08 구조체와 동적할당
·
Programming Languages/C
구조체 구조체(Struct) 선언과 맴버 접근 구조체는 배열과 같은 사용자 정의 자료형(User-Defined Data Type)이다. struct 키워드를 통해 구조체 자료형을 선언하고, 사용한다. 구조체 별칭(Alias) typedef 키워드를 통해 struct name -> alias 로 간단히 사용한다. 구조체 동적할당 #include #include #include // 구조체 별칭과 포인터 int main(void) { typedef struct Person { char name[20]; char addr[50]; int age; } as_; as_ *ptr = malloc(sizeof(as_)); as_ a; ptr = &a; strcpy(ptr->name, "이순신"); // (*ptr)...
07 배열과 동적할당
·
Programming Languages/C
자료 구조(Data Structure) : 데이터의 물리적, 논리적 관계 : 변수 또한 bit와 byte 단위의 Data를 다루는 자료구조지만, 주로 연속적, 규칙적으로 반복되는 Data의 집합을 의미한다. : 배열과 구조체(+공용체, 열거체)는 사용자 정의 자료형이다. 배열 배열(Array) 연속적, 규칙적으로 반복되는 자료들을 다루는 가장 기본적인 자료구조 배열 a 의 자료형(Data Type)은 int[5] 와 같은 사용자 정의 자료형(User-Defined Data Type)이다. 배열과 포인터(Array & Pointer) 다차원 배열(Multidimensional Array) : 배열을 요소로하는 배열 배열과 동적할당(Dynamic Memory Allocation) 03. memory 03.1..
06 알고리즘과 제어문
·
Programming Languages/C
알고리즘이란 무엇인가? 명확하게 정의된 문제에 대한, 논리적인 해결 방안 변수에 따라 결과가 맞기도 하고 틀리기도 한다면, 올바른 알고리즘이 아니다 if 조건문 문제: 세 값의 최대값을 구하는 알고리즘을 구현하라 if ~ else if ~ else 조건문 문제: 값의 부호(양수/음수/0) 판단하는 알고리즘을 구현하라 while 반복문 문제: 1부터 n까지의 정수 합을 구하는 알고리즘을 구현하라 for 반복문 문제: 1부터 n까지의 정수 합을 구하는 알고리즘을 구현하라 do ~ whlie 반복문 문제: 양수만 입력받아, 1부터 n까지의 정수 합을 구하는 알고리즘을 구현하라 중첩 반복문 문제: 곱셈표 출력을 구하는 알고리즘을 구현하라 문제: 입력받은 값 만큼 직각 이등변 삼각형 출력을 구하는 알고리즘을 구현..
05 변수와 연산자
·
Programming Languages/C
변수 : Variable, 變 변할 변 數 셈 수 : 변할 수 있는 값 : 변수명은 데이터(data)를 저장하는 메모리 공간을 상징한다 상수 : Constant, 常 항상 상 數 셈 수 : 고정된 값 리터널 : Literal, 데이터(값) 그 자체 // ↓ const 키워드를 이용한 심볼릭 상수 const int MAX = 10; // ↑ 리터럴 // ↓ #define을 이용한 매크로 심볼릭 상수 #define MAX 10; 변수와 메모리 주소의 이해 - 변수의 주소값이란 해당 데이터가 저장된 메모리의 "시작 주소"를 의미한다. - 그리고, 모든 값(변수, 상수, 리터럴, 함수 등)은 저장되며, 이는 메모리 주소 가지고 있음을 의미한다. - C언어에서는 이러한 주소를 1바이트 크기의 메모리 공간으로 나누..
04 리틀 엔디안, 빅 엔디안
·
Programming Languages/C
Endianness : 컴퓨터의 메모리와 같은 1차원의 공간에 여러 개의 연속된 대상(Byte)가 저장되는 순서(Byte order) Memory Model의 이해 데이터의 최소 단위는 1bit, 하지만 메모리의 데이터 최소 처리 단위는 32bit (4Byte), 64bit (8Byte)이다. 즉, 8bit(1Byte)씩 4개, 8개를 저장하고 처리해야 한다. 32bit(4Byte, 16진수 8개) 운영체제의 경우, 4,294,967,296(4GB) 개의 1Byte를 메모리 주소값 가진다. MSB, LSB MSB(Most Significant Bit): 2진수(bit)의 가장 큰 자릿수 LSB(Least Significant Bit): 2진수(bit)의 가장 작은 자릿수 MSB와 LSB는 데이터를 비트(..
03 이진수와 음수, 실수 표현
·
Programming Languages/C
2진수과 음수 표현 컴퓨터는 "덧셈"만 가능하다. "2의 보수"를 통해 음수 기능을 구현 한다. 2진수과 실수 표현 컴퓨터에서 실수도 2진수로 표현해야 한다 부동 소수점 방식을 사용하면 고정 소수점 방식보다 훨씬 더 많은 범위까지 표현할 수 있지만, 항상 오차가 존재한다 고정 소수점(fixed point) 방식 - 하나의 실수를 정수부와 소수부의 자릿수를 미리 정해 놓고, 고정된 자릿수로 소수를 표현 부동 소수점(floating point) 방식 - 하나의 실수를 가수부와 지수부로 나누어 표현하는 방식 - 32비트 (4바이트) 방식: 단정도 (single precision) - 64비트 (8바이트) 방식: 배정도 (double precision) - 부호부 (Sign) : 1비트. 숫자의 부호를 나타내며..
Ch.18. Multi Thread
·
Programming Languages/C
Process 1. 프로세스 생성(복사) 2. IPC 필요 3. Context Switching Thread 멀티 프로세스의 장점을 유지하고, 단점을 극복하기 위해 쓰레드(Thread) 등장 1. 쓰레드의 생성 및 Context Switching 이 프로세스 보다 빠르다 2. 쓰레드간의 데이터 교환에 특별한 기법이 필요 없다. 메모리 1. "데이터 영역" - 전역 변수, "힙(Heap) 영역" - 동적 할당, "스텍(Stack) 영역" - 함수 실행 2. 실행 흐름의 분리를 목적으로 한다면, 프로세스간의 완전한 메모리 분리가 아닌, 스텍 영역의 함수(실행 흐름)만을 분리시킨다. = 별도의 실행 흐름을 위해 스텍 영역만을 독립적으로 유지한다. Process & Thread 프로세스 : 운영체제 관점에서 별..
02 이진수와 비트, 바이트
·
Programming Languages/C
2진수과 기수, 서수 - 2진법, 8진법, 10진법, 16진법 값의 표현은 0에서 시작 - 2가지, 8가지, 10가지, 16가지를 한자리에서 표현 가능 - 진법 변환 연산에서 2^0 = 1 에서 시작 - 경우의 수는 가짓수이다. (갯수, 서수) 2진수과 Byte - 컴퓨터는 모든 정보를 0과 1로 인식하는 2진수 기반 - 1bit = 2진수 1개 - 4bit = 2진수 4개 = 16진수 1개 = 0~15 중 숫자 1개 표현 - 8bit = 2진수 8개 = 16진수 2개 = 0~255 중 숫자 1개 표현 = 1Byte - 32bit = 2진수 32개 = 16진수 8개 = 4Byte - 64bit = 2진수 64개 = 16진수 16개 = 8Byte 2진수과 상업 저장 용량 단위 2진수과 네트워크 속도 단위 ..
Ch.13. send, recv, readv, writev
·
Programming Languages/C
(Linux) send & recv #include ssize_t send(int sockfd, const void *buf, size_t nbytes, int flags); // 성공시 전송된 바이트 수, 실패시 -1 반환 // sockfd 데이터 전송 대상과의 연결을 의미 하는 소켓의 파일 디스크립터 전달 // buf 전송할 데이터를 저장하고 있는 버퍼의 주소 값 전달 // nbytes 전송할 바이트 수 전달 // flags 데이터 전송시 적용할 다양한 옵선 정보 전달 #include ssize_t recv(int sockfd , void *buf, size_t nbytes, int flags); // 성공시 수신한 바이트 수(단 EOF 전송시 0), 실패시 -1 반환 // sockfd 데이터 수신 ..
Ch.12. IO Multiplexing
·
Programming Languages/C
Multiplexing select() 참고 링크 #include #include FD_CLR(int fd, fd_set* set); FD_ISSET(int fd, fd_set* set); FD_SET(int fd, fd_set* set); FD_ZERO(fd_set* set); int select(int maxfd, fd_set* readset, fd_set* writeset, fd_set* excepts, struct timeval* timeout); // 성공시 O 이상, 실패시 -1 반환 // maxfd 검사 대상이 되는 파일 디스크립터의 수. // readset fd_set형 변수에 '수신된 데이터의 존재여부'에 관심 있는 파일 디스크립터 정보를 모두 등록해서 그 변수의 주소 값을 전달한다. /..
Ch.11. pipe()
·
Programming Languages/C
Pipe 프로세스간의 통신은 동시에 접근 가능한 메모리 공간만 있다면 얼마든지 가능하다. 하지만, 프로세스는 서로 완전히 별개의 메모리 구조를 가진다. 따라서, 프로세스간 통신은 Pipe를 이용한다. Pipe는 Socket과 마찬가지로 OS에 속하는 자원으로 fork의 복사 대상이 아니다. #include int pipe(int filedes[2]); // 성공시 0, 실패시 -1 반환 // filedes[0] 파이프로부터 데이터를 수신하는데 사용되는 파일 디스크립터가 저장. // 즉, 파이프의 출구 // filedes[1] 파이프로 데이터를 전송하는데 사용되는 따일 디스크립터가 저장된다 // 즉, 파이프의 입구 Pipe 기반 프로세스간의 단방향 통신 파이프 생성 부모 프로세스 = 출력 경로 자식 프로세..
Ch.10. Multi Process Echo Server, Client
·
Programming Languages/C
Multi Process Echo Server 클라이언트의 서비스 요청(연결요청)이 있을 때마다 에코 서버는 자식 프로세스를 생성해서 서비스를 제공 1. accept 함수호출을 통해서 연결요청을 수락 2. 이때 얻게 되는 연결 소켓의 디스크립터를 자식 프로세스 생성 후 전달 3. 자식 프로세스는 전달받은 연결 디스크립터를 바탕으로 서비스를 제공 Multi Process Echo Client 기존 에코 서버는 클라이언트는 서버로 데이터를 전송 후 에코되어 돌아올 때까지 대기 == 에코되어 돌아온 데이터를 수신 후, 추가 전송 가능 서버로부터 수신 여부에 상관 없이 데이터 전송 클라이언트의 부모 프로세스 : 수신 담당 클라이언트이 자식 프로세스 : 송신 담당 데이터의 수신여부에 상관없이 데이터 전송이 가능 ..
ubiquitous4g
'Programming Languages' 카테고리의 글 목록 (5 Page)