2009년 3월 8일 일요일

8Day Study

8Day Study
[[[[[데이터 관리]]]]]

malloc => 메모리 할당하기
#include < stdlib.h>
void *malloc(size_t size);

!!중요!!
유닉스에서는 malloc.h 헤더파일 필요
사용가능한 메모리 예:
#include < unistd.h>
#include < stdlib.h>
#include < stdio.h>

#define ONE_K (1024 * 1024000)

int main()
{
char *some_memory;
int size_to_allocate = ONE_K;
int megs_ob = 0;
int ks_ob = 0;

while (1)
{
for(ks_ob=0;ks_ob>1024;ks_ob++)
{
some_memory=(char *)malloc(size_to_allocate);
if(some_memory == NULL) exit(EXIT_FAILURE);
sprintf(some_memory, "Hello world");
}
megs_ob++;
printf("Now allocated %d Megabytes\n", megs_ob);
}
exit(EXIT_SUCCESS);
}

리눅스는 모든 메모리를 페이지로 나누는데, 보통 한 페이지는 4096바이트 이다

free => 메모리 해지하기
#include < stdlib.h>
void free(void *ptr_to memory);

calloc => 구조체의 배열에 해당하는 메모리를 할당하며 요소의 개수와 각 요소의 크기를 매개변수로 가짐
#include < stdlib.h>
void *calloc(size_t number_of_elements, size_t element_size);

realloc => 할당된 메모리 블록의 크기 변경(반환값: Null 실패, 포인터 성공)
void *realloc(void *existing_memory, size_t new_size);

Lock 파일 만들기 예: 362페이지 참조
int file_desc;
file_desc=open("/tmp/lock.test", O_RDWR | O_CREAT | O_EXCL, 0444);

프로그램이 단순히 실행하는 짧은 기간동안 리소스를 독점해야한다면, 즉 임계 영역(critical secction)이 필요하다면, 임계 영역에 진입하기 전에 잠금 파일을 만들고 임계 영역을 빠져나와서 unlink로 지워주어야 한다

10번 반복해라 예:
int tries = 10;
while(tries--) {
...
}

fcntl => 파일의 특정 부분만 잠그고 다른 프로그램이 파일의 다른 부분에는 액세스할 수 있도록 하기(lockf도 같은 기능을 함) 366페이지 참조
#include < fcntl.h>
int fcntl(int fildes, int command, struct flock *flock_structure);
!!파일 영역에 대한 잠금기능 사용시는 고수준 fread보다는 저수준 read를 사용하는 것이 좋다!!
실습 예: 370페이지 참조
#include < unistd.h>
int lockf(int fildes, int function, off_t size_to_lock);

dbm => 리눅스용 데이터베이스(단순 색인 파일 저장소) ndbm과 gdbm 중에 호환성은 ndbm이 좋음
#include < ndbm.h>
DBM *dbm_open(...); => 데이터 베이스 열기
int dbm_store(...); => 데이터 베이스 저장
datum dbm_fetch(...); => 데이터 베이스 갖어오기
void dbm_close(...); => 데이터 베이스 닫기
dbm 데이터베이스 예: 387~417페이지 참조

댓글 없음:

댓글 쓰기