프로그래밍

    [11] 시스템 프로그래밍 기초 (비트 연산)

    exclusive OR 1과 0, 0과 1처럼 달라야지만 true가 되는 것. bit 연산을 한다는 것은 자기 비트에 맞는 것들을 연산하는 것. 특정한 비트의 정보가 0인지 1인지 검사하는 것을 마스킹이라고 한다. a ^ (0x1

    [10] 시스템 프로그래밍 기초 ( standard IO )

    표준 스트림 프로그램의 메인 함수가 불려질 때, 그곳에는 이미 열기도 하고 사용도 할 수 있는, 미리 선언된 3개의 스트림을 갖게 된다. 이것은 프로세스를 위해 만들어놓은 "표준"의 입/출력을 표현하기 위함이다. typedef struct { int _cnt; unsigned char *_ptr; unsigned char *_base; int _bufsize; unsigned char _flag; unsigned char_file; }FILE; 파일을 생성하는 방법 create() 파일을 열고, 닫는 방법 open(), close() 파일을 읽고, 쓰는 방법 read(), write() 파일의 포인터 위치를 변경하는 함수 lseek() 파일의 정보를 나타내는 stat() 우리의 프로그램은 운영체제에 요청..

    [09] 시스템 프로그래밍 기초 ( 배열 )

    String Searching char* strchr(const char *s, int c) char* strcpy(char *dst, const char *src) char* strstr(const char *s1, const char *s2) char* strpbrk(const char *s1, const char *s2 Stirng token 문자열을 자르는 데에 사용된다. 포인터의 장난질이다. pointer가 있는 곳이 시작점, null이 마지막 값이다. 컴퓨터는 int와 같은 native 자료형을 더 빠르게 처리한다. ispunct를 사용하여 \t나 ' '를 걸러낸다. 무한 수를 처리한다는 것은 문자열 타입에서 int로 갔다가 다시 문자열 처리한다. toascii(int c) : 정수를 문자열로..

    [08] 시스템 프로그래밍 기초 (포인터 심화)

    일반 배열과 포인터로 만든 배열의 차이 먼저 스트링 constants는 텍스트 세그먼트에 저장된다. 이 텍스트 세그먼트는 수정 불가하다. 배열은 스택 영역에 복사를 뜬다. 따라서 수정이 가능하다. 그러나 포인터는 스트링 콘스턴트를 텍스트 세그먼트에 둔 채로 텍스트 세그먼트의 주소값만 받아온다. 이것은 즉, 포인터 배열은 수정이 불가하다는 뜻이다. # a[2][3] 배열이 있다면 다음과 같이 나타낼 수 있다. a[0][0] == **a; a[0][1] == *(*a+1); a[0][2] == *(*a+2); a[1][0] == **(a+1); a[1][1] == *(*(a+1)+1); a[1][2] == *(*(a+1)+2); 배열은 고정적으로 메모리를 할당하는 데에 비해 포인터는 그때마다 동적으로 할당한..

    [07] 시스템 프로그래밍 기초(배열과 포인터)

    배열(Array) p.246 int grade[100]; 이라는 배열이 있다고 하자. 이때 주소값은 0x100이라고 하면 grade[1]의 주소갑은 0x104이다. int가 4byte이기 때문이다. char grade[] = "HANYANG"; 이라는 배열은 문자열의 각각의 문자를 각 문자 배열 안에 넣는 것이다. 따라서 grade[0]에는 'H'가, grade[1]에는 'A'가 들어있다. 주소값을 참조할 때는 &를 쓴다. grade의 주소값을 0x100이라 한다면 &grade[0]는 0x100이다. # Array space 32bit로는 4GB밖에 쓰지 못하기 때문에 64bit 운영체제가 나왔다. Pointer p.248 char *p = grade; p++; 배열은 상수(constant)이지만 포인터..

    [06] 시스템 프로그래밍 기초(메모리)

    character 타입을 이용하여 operator와 숫자로 input을 분류하고, input을 체크하는 함수 만들기(팀플) (p.214) C는 object를 어떻게 처리할 것인가, JAVA는 object 중심으로 처리해서 작성 방식이 반대이다. C는 절차지향적 언어이기 때문에, 함수 호출을 최소화하면서 모듈화 시키는 것이 중요하다. stack : First in last out 방식의 자료구조 메모리의 구조 : Code(코드 저장), Data(전역변수), 나머지(heap: 메모리가 부족할 때 자동으로 메모리를 할당한다(Dynamic memory allocation), stack : a->b->c에서 return은 c->b->a) Stack의 memory pointer는 아래로 내려가고, heap의 mem..