数据管理
1.内存管理(物理内存&swap space)
2.文件封锁
#include<stdio.h>
#include<stdlib.h>
#include<fcntl.h>
#include<unistd.h>
#include<errno.h>
int main(){
int file_des;
int save_err;
file_des=open("/tmp/LCK.txt",O_RDWR|O_CREAT|O_EXCL,0444);
if(file_des==-1){
save_err=errno;
printf("open failed with error %d\n",save_err);
}
else printf("open ok\n");
exit(0);
}
文件中的封锁区
3.dbm database
#include<memory.h>
#include<unistd.h>
#include<stdio.h>
#include<stdlib.h>
#include<fcntl.h>
#include<gdbm.h>
#include<string.h>
#define TEST_DB_FILE "/tmp/dbm1_test"
#define ITEMS_USED 3
struct test_data{
char misc_char[15];
int any_integer;
char more_char[21];
};
int main(){
struct test_data items_to_store[ITEMS_USED];
struct test_data item_retrieved;
char key_to_use[20];
int i,result;
datum key_datum;
datum data_datum;
GDBM_FILE dbm_ptr;
dbm_ptr=gdbm_open(TEST_DB_FILE,512,O_RDWR|O_CREAT,066,0);
if(!dbm_ptr){
fprintf(stderr,"open dbm error\n");
exit(1);
}
memset(items_to_store,'\0',sizeof(items_to_store));
strcpy(items_to_store[0].misc_char,"FIRST!");
items_to_store[0].any_integer=47;
strcpy(items_to_store[0].more_char,"foo");
strcpy(items_to_store[1].misc_char,"bar");
items_to_store[1].any_integer=13;
strcpy(items_to_store[1].more_char,"unlucky?");
strcpy(items_to_store[2].misc_char,"THIRD!");
items_to_store[2].any_integer=3;
strcpy(items_to_store[2].more_char,"baz");
for(i=0;i<ITEMS_USED;i++){
sprintf(key_to_use,"%c%c%d",items_to_store[i].misc_char[0],items_to_store[i].more_char[0],items_to_store[i].any_integer);
key_datum.dptr=(void *)key_to_use;
key_datum.dsize=strlen(key_to_use);
data_datum.dptr=(void *)&items_to_store[i];
data_datum.dsize=sizeof(struct test_data);
result = gdbm_store(dbm_ptr,key_datum,data_datum,GDBM_REPLACE);
if(result!=0){
fprintf(stderr,"dbm_store fail\n");
exit(2);
}
}
sprintf(key_to_use,"bu%d",13);
key_datum.dptr=key_to_use;
key_datum.dsize=strlen(key_to_use);
data_datum=gdbm_fetch(dbm_ptr,key_datum);
if(data_datum.dptr){
printf("data retrieved\n");
memcpy(&item_retrieved,data_datum.dptr,data_datum.dsize);
printf("retrieved item %s %d %s\n",item_retrieved.misc_char,item_retrieved.any_integer,item_retrieved.more_char);
}
else{
printf("no data find\n");
}
gdbm_close(dbm_ptr);
exit(0);
}
///////////////////////////////////课本关于DBM的内容比较老,现在是GDBM
没有评论:
发表评论