일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- react
- 컴퓨터구조
- redis
- Heap
- JavaScript
- Proxy
- Java
- Algorithm
- spring webflux
- 운영체제
- JPA
- C
- 자바
- mongoDB
- 네트워크
- Data Structure
- design pattern
- 파이썬
- c언어
- 백준
- MySQL
- 자료구조
- IT
- 알고리즘
- OS
- Kafka
- 디자인 패턴
- Galera Cluster
- Spring
- MSA
- Today
- Total
목록C (7)
시냅스
파일 디스크립터 (File Descriptor) Unix OS에서 모든 것은 파일로 관리되는데 이러한 파일에 접근할 때 파일 디스크립터 라는 개념을 이용한다. 파일은 일반적인 정규 파일, 디렉토리, 소켓, 파이프, 블록 디바이스, 캐릭터 등등 모든 객체들을 파일이라 칭한다. 0을 포함한 양수인 정수만을 값으로 하고, 0 : 표준 입력 (Standard Input, STDIN_FILENO) 1 : 표준 출력 (Standard Output, STDOUT_FILENO) 2 : 표준 에러 (Standard Error, STDERR_FILENO) 를 기본적으로 할당 받는다. FD는 숫자로, FD 테이블의 인덱스를 의미하기 때문에 FD가 3으로 반환됐을 경우, File Descriptors table에 3번 항목이..
구조체 구조체는 여러 정보들을 한 데 묶어주는 역할을 한다. 기본적인 use case 는 아래와 같다. struct Person { // 구조체 char name[10]; // 구조체 멤버 int age; char address[100]; } /* struct Person { // 구조체 char name[10]; // 구조체 멤버 int age; char address[100]; } p1; 위와 같이 p1을 붙여 줄 경우 바로 p1이라는 변수를 선언한 것 */ struct Person p1; // 구조체 변수 선언 strcpy(p1.name, "김명수"); // 구조체 멤버에 값 할당 p1.age = 1; strcpy(p1.address, "서울특별시 강남구") typedef를 통해 struct 키워드..
restrict 포인터 메모리 접근에 관한 최적화 기능. Alias rule (메모리 상 같은 위치를 다른 변수로 나타낼 수 있는 규칙)에 부합하지 않는 명확한 상황이라고 판단되었을 때 메모리 위치를 확인하는 과정을 생략한다. 즉, restrict 키워드가 쓰여졌다면 각 변수가 같은 메모리 공간이 아니라는 것을 컴파일러에게 알려주는 것. restrict 키워드를 쓰기 이전 void increase(int *a, int *b, int *x) { *a += *x; // x를 역참조하여 가져온 값만큼 *a를 역참조하여 값을 증가시킴 *b += *x; // x를 역참조하여 가져온 값만큼 *b를 역참조하여 값을 증가시킴 } 아래와 같이 어셈블리어로 확인할 수 있다. restrict 키워드는 c99 표준으로 -st..
Makefile에 앞서... 컴파일 단계 1. Preprocessor (전처리 단계) 전처리기가 전처리기 지시자(헤더, 매크로)를 처리한다. 소스코드를 담고있는 c파일로부터 i를 생성한다. .c -> .i 2. Compiler (컴파일 단계) 전처리된 파일에서 .i -> .s를 생성한다. .s 파일은 어셈블리어 코드로 이루어져 있다. 3. Assembler (어셈블 단계) .s -> 기계어로 이루어진 .o 생성 4. Linking (링킹 단계) .o (object) 파일은 라이브러리 함수가 없기 떄문에 라이브러리와 .o 파일을 링킹하여 .exe 파일을 생성한다. Makefile Makefile을 통해 컴파일 단계들을 대량으로 제어하거나, 처리하기 쉽게 할 수 있다. 중요한 키워드는 Incremental ..
파일 모드 기능 설명 "r" 읽기 전용 파일을 읽기 전용으로 엽니다. 단, 파일이 반드시 있어야 합니다. "w" 쓰기 전용 새 파일을 생성합니다. 만약 파일이 있으면 내용을 덮어씁니다. "a" 추가 파일을 열어 파일 끝에 값을 이어 씁니다. 만약 파일이 없으면 파일을 생성합니다. "r+" 읽기/쓰기 파일을 읽기/쓰기용으로 엽니다. 단, 파일이 반드시 있어야 하며 파일이 없으면 NULL을 반환합니다. "w+" 읽기/쓰기 파일을 읽기/쓰기용으로 엽니다. 파일이 없으면 파일을 생성하고, 파일이 있으면 내용을 덮어씁니다. "a+" 추가(읽기/쓰기) 파일을 열어 파일 끝에 값을 이어 씁니다. 만약 파일이 없으면 파일을 생성합니다. 읽기는 파일의 모든 구간에서 가능하지만, 쓰기는 파일의 끝에서만 가능합니다. t 텍..
함수 헤더 파일 설명 strlen(문자열포인터); strlen(문자배열); string.h 문자열의 길이를 구합니다(NULL은 포함하지 않음). strcmp(문자열1, 문자열2); string.h 문자열1과 문자열2를 비교합니다(Windows). - -1: ASCII 코드 기준으로 문자열2가 클 때 - 0: ASCII 코드 기준으로 두 문자열이 같을 때 - 1: ASCII 코드 기존으로 문자열1이 클 때 앞에 것이 크면 1, 뒤에 것이 크면 -1입니다. 리눅스와 OS X에서는 문자열1의 ASCII 코드값에서 문자열2의 ASCII 코드값을 뺀 결과를 반환합니다. - 반환값이 양수가 나오면 문자열1이 크고, 음수가 나오면 문자열2가 큼 - ASCII 코드 기준으로 두 문자열이 같으면 0 strcpy(대상문자..
포인터 : 메모리 상에 위치한 특정한 데이터의 (시작) 주소값을 보관하는 변수 포인터에도 형이 있다 메모리를 효과적으로 사용하는 기술 메모리 관리 - 간접 주소 지정 방식 자신이 사용하고 싶은 메모리의 '주소'를 저장하고 있는 메모리가 포인터 32bit -> 4btye 64bit -> 8byte int 형 데이터의 주소값을 저장하는 포인터와, char 형 데이터의 주소값을 저장하는 포인터가 서로 다르다. 'ptr = ' : 포인터 변수의 값(가리키는 대상의 주소)이 변경 '*ptr = ' : 포인터가 가리키는 대상의 값이 변경 포인터를 사용하여 간접 주소 방식으로 값을 대입하는 이유? 모든 변수가 같은 함수에 선언되는 것은 아니기 때문 일반 변수는 다른 함수에 있는 변수 사용 불가 포인터 변수는 다른 함..