컥..gdbm
글쓴이: puaxx / 작성시간: 수, 2005/09/07 - 4:21오후
허.. 이상합니다..
코드:
#include <stdio.h> #include <stdlib.h> #include <string.h> #include <time.h> #include <gdbm.h> int main(int argc,char **argv){ GDBM_FILE dbf; char buf[65]={0}; datum key={0},nextkey={0},content={0}; int ret; printf("Content-Type: text/html;\r\n"); printf("\r\n"); dbf = gdbm_open("haha", 0, GDBM_WRCREAT,0777, NULL); if(dbf==NULL){ printf("gdbm open failure.\n"); exit(1); } sprintf(buf,"%d",(int)time(NULL)); key.dptr=(char *)calloc(0,sizeof(char)*strlen(buf)+1); memcpy(key.dptr,buf,strlen(buf)); key.dsize=strlen(buf); printf("F: %s %d\n",key.dptr,key.dsize); memset(buf,0x0,65); sprintf(buf,"---%d---",(int)time(NULL)); content.dptr=(char *)calloc(0,sizeof(char)*strlen(buf)+1); memcpy(content.dptr,buf,strlen(buf)); content.dsize=strlen(buf); printf("S: %s %d\n",content.dptr,content.dsize); ret = gdbm_store(dbf, key, content, GDBM_INSERT); if(ret!=0){ printf("An error occurred.\n"); exit(2); } key = gdbm_firstkey ( dbf ); while ( key.dptr ) { content=gdbm_fetch(dbf, key); printf("Contents-> %s %d\n",content.dptr,content.dsize); nextkey = gdbm_nextkey ( dbf, key ); key = nextkey; } gdbm_close(dbf); return 0; }
컴파일:
gcc -Wall -o test test.c -lgdbm
결과:
Content-Type: text/html; F: 1126077459 10 S: ---1126077459--- 16 Contents-> ---1126075682--- 16 Contents-> ---1126075515--- 16 Contents-> ---1126075697--- 16 Contents-> ---1126075535--- 16 Contents-> ---1126075760--- 16 Contents-> ---1126075675--- 16 Contents-> ---1126075534--- 16 Contents-> ---1126075695--- 16 Contents-> ---1126075753--- 16 Contents-> ---1126075674--- 16 Contents-> ---1126075694--- 16 Contents-> ---1126074605--- 16 Contents-> ---1126075527--- 16 Contents-> ---1126075752--- 16 Contents-> ---1126075672--- 16 Contents-> ---1126075531--- 16 Contents-> ---1126075687--- 16 Contents-> ---1126075750--- 16 Contents-> ---1126075671--- 16 Contents-> ---1126075691--- 16 Contents-> ---1126075885--- 16 Contents-> ---1126074602--- 16 Contents-> ---1126075519--- 16 Contents-> ---1126075524--- 16 Contents-> ---1126075550--- 16 Contents-> ---1126075758--- 16 Contents-> ---1126074601--- 16 Contents-> ---1126075523--- 16 Contents-> ---1126075679--- 16 Contents-> ---1126075684--- 16 Contents-> ---1126075517--- 16 Contents-> ---1126075757--- 16 Contents-> ---1126075762--- 16 Contents-> ---1126075683--- 16 Contents-> ---1126075882--- 16 Contents-> ---1126075516--- 16 Contents-> ---1126075521--- 16 Contents-> ---1126075677--- 16 Contents-> ---1126077459--- 16 Contents-> ---1126075761--- 16 Contents-> ---1126075755--- 16 Contents-> ---1126074560--- 16 Contents-> ---1126075520--- 16 Contents-> ---1126075676--- 16 Contents-> ---1126075681--- 16 Contents-> ---1126075514--- 16 Contents-> ---1126075696--- 16 Contents-> ---1126075875--- 16 Contents-> ---1126075529--- 16 Contents-> ---1126075754--- 16 Contents-> ---1126075680--- 16 Contents-> ---1126075513--- 16 Contents-> ---1126074606--- 16 Contents-> ---1126075528--- 16 Contents-> ---1126075533--- 16 Contents-> ---1126075689--- 16 Contents-> ---1126075553--- 16 Contents-> ---1126075673--- 16 Contents-> ---1126075872--- 16 Contents-> ---1126075532--- 16 Contents-> ---1126075688--- 16 Contents-> ---1126075693--- 16 Contents-> ---1126074604--- 16 Contents-> ---1126075526--- 16 Contents-> ---1126075751--- 16 Contents-> ---1126075510--- 16 Contents-> ---1126075692--- 16 Contents-> ---1126074603--- 16 Contents-> ---1126075525--- 16 Contents-> ---1126075530--- 16 Contents-> ---1126075686--- 16 Contents-> ---1126075759--- 16 Contents-> ---1126075764--- 16 Contents-> ---1126075685--- 16 Contents-> ---1126075690--- 16 Contents-> ---1126075518--- 16 Contents-> ---1126074599--- 16 Contents-> ---1126075763--- 16 Contents-> ---1126074600--- 16 Contents-> ---1126075522--- 16 Contents-> ---1126075698--- 16 Contents-> ---1126075756--- 16
제가 gdbm라이브 러리를 가지고 테스트 한것인데요..
이상하게 데이터 순서가 뒤죽박죽으로들어가네요. 일정한 순서대로 들어갈줄 알았더니...초난감입니다 --;; 다른 라이브러리는 괜찮을까요?
제가 잘못본것일까요? 아님...
Forums:
gdbm의 자료구조는 해시테이블입니다.따라서 <key,value
gdbm의 자료구조는 해시테이블입니다.
따라서 <key,value>쌍에서 key가 정렬상태로 저장되는 것이 아니죠
초보 질문입니다...;;;;;
실행할때 ./test 만 하면 되나요? ./test만 하니까요.......
F: 1200965947 10
S: ---1200965947--- 16
Segmentation fault
이렇게 나오네요.......ㅡㅡ;;;; 완전 초보라서.....이렇게 질문드립니다.
혹시 db파일을 추가해야 하나요? 아니면.....다른 실행 방법이 있나요? ㅡ.,ㅡ;;;;
죄송하게도.......질문하신 글에....질문을 남기게 됬습니다.....ㅠ_ㅠ 죄송합니다.....
_______
항상 겸손하게,
배움의 자세로 임하자.
댓글 달기