리눅스 및 유닉스에서 제공하는 시스템 함수에 관한 소개와 이를 이용한 예제코드를 통한 사용법에 대해 알아본다.
void *malloc(size_t size) |
메모리 상에 동적으로 공간을 할당한다. 할당된 공간은 힙(heap) 상에 잡히며, 사용 후에는 동적으로 메모리 해제가 가능하다. 이점이 배열과 다른 점이다.
한번 할당이후에는 반드시 free() 를 이용하여 해제시켜야 한다. malloc() 함수가 수행되면, 리턴값으로 할당된 주소의 첫 주소값을 반환한다.
#include <stdlib.h> ... typedef struct _tag_DB_OP { int type; BTREE_NODE_T * start_addr; BTREE_NODE_T * end_addr; DUMMY_NODE_T * dummy_addr; int (*insert)(int value); int (*delete)(int value); int (*print)(); }DB_OP_T; ... DB_OP_T * set_db; ... set_db = (DB_OP_T *)malloc(sizeof(DB_OP_T));
void *memcpy(void *dest, const void *src, size_t n) |
복사하려는 원본 메모리영역(src) 에서 도착(?) 메모리영역(dest)으로 사이즈(n)만큼 복사한다.
#include <string.h> ... set_db = (DB_OP_T *)malloc(sizeof(DB_OP_T)); set_db->type = db_type; set_db->dummy_addr = 0; set_db->start_addr = 0; set_db->end_addr = 0; memcpy((void *)set_db,(void *)db_ops[set_db->type],sizeof(DB_OP_T)); // set_db 와 db_ops[set_db->type] 은 같은 구조체 이여야 함 return 0;
void *memset(void *s, int c, size_t n) |
메모리 영역(s)을 사이즈(n) 만큼 정수© 값으로 채운다.
#include <string.h> ... memset((void*)pfd,0x00,sizeof(DB_FD_T)); // 구조체(DB_FD_T) 사이즈 만큼 0 으로 채움
int strcmp(const char *s1, const char *s2) |
두 개의 문자열을 비교한다. s1 과 s2 문자열이 같으면, 0 을 반환한다. s1 이 s2 보다 크면, 음수, 작으면 양수를 반환한다.
#include <string.h> ... if(strcmp(argv[1],"l") == 0) { flash_open(LOGICAL, size, input_addr, base_addr); }
int sprintf(char *str, const char *format, …); |
입력된 포맷에 대해 원하는 출력의 형태로 변환 시킬 수 있다. 예를 들면, int 포맷의 변수를 string 포맷의 변수로 변경할 수 있다.
#include <stdio.h> ... char str[128]; int input, output; ... output = strtol(str, "%d", value); // 십진수 형태인 int 변수 value 를 str 문자열 배열에 저장한다(int -> char).
strtol(const char *nptr, char **endptr, int base); |
string 문자를 숫자로 변환한다. 예를 들면, string 변수를 8, 10, 16
#include <stdlib.h> ... int result; ... result = strtol(str, NULL, 2);
int tcsetattr(int fd, int optional_actions, struct termios *termios_p); |
termios_p 가 가리키는 구조체 내에 터미널 인터페이스 변수의 현재 값을 저장한다. tcsetattr 을 호출하면 터미널 인터페이스를 다시 환경 설정할 수 있다.