1、malloc用来分配内存先是物理内存接着是交换空间。LInux提供虚拟内存,以页为单位进行划分。如果在以分配的内存后边继续写入一些数据会导致写入错误。
如果分配内存超过物理内存和交换空间的总和会导致Linux杀死进程
滥用内存、内存超出、空指针。 malloc、free calloc、 realloc
2、文件锁定:原子方式创建锁文件,锁定文件不被其他文件操作,也可以只锁定文件 的一部分
fcntl.h open 调用,并带上O_CREAT O_EXCL
针对某个资源创建一个锁文件。然后其他程序通过检查这个文件来判断它们自己是否被允许访问这个资源,锁文件充当一个指示器的作用
unlink系统调用删除所文件。
./lock2 & ./lock2 后台运行一份副本,然后在前台运行另一份副本
3、区域锁定。锁定文件区域;文件段锁定;文件区域锁定 fcntl 和locf调用,主要是用fcntl调用
共享锁、独占锁、解锁 F_RDLCK F_UNLCK F_WRLCK 区域的标志
fcntl的标志
F_GETLK
F_SETLK
F_SETLKW
l_pid
4、数据库、可存储长度可变的数据记录,有效地存储和检索数据
5、DBM数据存储例程集,称为dbm数据库。适合于存储相对比较静态的索引化数据。轻量级软件。适用于频繁访问,但却很少更新的数据,创建数据很慢,检索很快
dbm_open
dbm_store存储一个用于引用的索引,一个用于实际数据
dbm_fetch从数据库中检索数据,返回一个datum类型的结构
dbm_close
datum dbm数据库中的数据结构类型,跟FILE 结构很像
6、将char*赋值给char[30]时类型不兼容char[30]是字符数组的首地址,是一个常量,是不允许被赋值的
char more_chars[21];
如果 more_chars = "foo" 则会报错,只能用
strcpy(items_to_store[0].more_chars, "foo");
7、dbm相关
DBM *dbm_ptr; //pointer to dbm 指向数据库的指针
datum是用定义的数据类型,用来访问数据库的结构,跟访问文件的FILE结构很相似,存储用的数据块
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);dbm_ptr = dbm_open(TEST_DB_FilE,O_RDWR | O_CREAT, 0666); 打开数据库文件获得指针result = dbm_store(dbm_ptr,key_datum,data_datum,DBM_REPLACE); 存储一个数据块,包括key索引结构体,和数据块结构体data_datum = dbm_fetch(dbm_ptr,key_datum); 根据key来索引存储的数据dbm_close(dbm_ptr); 关闭数据库文件