Linux C笔记 (3)

1. 无缓冲文件:(系统调用)直接从内核获取
    有缓冲文件:(库函数)用户空间和内核空间 生成了缓冲区,把内核数据写入缓冲区,调用函数从缓冲区获取,以此来减少对内核的访问
    首先无缓存只不过是指在用户层没有缓存,但对于内核来说,还是进行了缓存
    如果你想要写数据到文件中(即硬盘中),内核先将数据写入到内核中所设的缓冲储存器(write()系统调用),等缓冲器满的时候再真正写     到磁盘上
带缓冲的IO是在用户层再建立一个缓冲区(流缓冲区),通过减少对系统调用(read() 和 write())的次数来提高性能
例如:用户多次调用fwrite将数据写入流缓冲区,等流缓冲区满的时候再调用一次write(),写入内核缓冲区
    无缓冲IO操作数据流向路径:数据->内核缓冲区->磁盘
    带缓冲IO操作数据流向路径:数据->流缓冲区->内核缓冲区->磁盘

2.库函数与系统调用的区别:
     ①库多次读写效率高,一次读写系统调用高
     ②库函数,不稳定,由第三方提供,可能有小bug
     ③访问特殊文件,如网络文件,设备文件,少数调用时,使用系统调用,普通文件一般用库函数
     ④依赖的对象不同,系统调用依赖操作系统
     ⑤库函数有缓冲,而系统调用无缓冲
     函数库调用是语言或应用程序的一部分,而系统调用是操作系统的一部分。
     库函数调用通常比行内展开的代码慢,因为它需要付出函数调用的开销。但系统调用比库函数调用还要慢很多,因为它需要把上下文环境      切换到内核模式。

3.文件存储的缺点:无格式存储
   数据库:一个特殊的文件(数据库文件)
     (DATA BASE简称DB)就是一个有结构的,集成的,可共享的统一管理的数据集合,不仅包括数据本身,而且包括相关数据之间的联系。
      数据库计数主要研究如何存储,使用和管理数据;


    DBMS:数据库管理系统软件,所以访问数据库的请求都由DBMS来完成,DBMS提供了操作数据库的许多命令(语言),即SQL语言
          通过软件对数据库做操作(读写等)


     LINUX下通过 touch test.db 来创建数据库文件


4.不同的管理软件,管理方式不同
     主流的模型:(1)关系型数据库模型,用关系来表示实体类型以及实体间联系的模型成为关系型模型(如登记表)
                        (2)层次结构模型
                        (3)网状结构模型


5.数据库系统结构:
          (1)本地小型数据库
          (2)主从式数据库
          (3)分布式数据库
          (4)客户/服务器结构


6.大型数据库:SQL,Oracle,DB2,Access


7.基本类型:
     关系:一张二维表
     元组:行
     属性(字段):列
     主键:某一列可以唯一标识一行


8.嵌入式数据库的要求:
     ①体积适当     ②可移植性     ③编程接口简单     ④代码开源
     
     sqlite3 text.db   进入,     .exit 退出


9.SQL:
     功能:(1)数据定义(DDL):用户定义、删除和修改数据模式
               (2)数据查询(DQL):用户查询数据
               (3)数据操作(DML):用于增、删、改数据
               (4)数据控制(DCL):用于控制数据访问权限


     命令:每个命令以‘;’结束,且不区分大小写
     数据类型:① integer 整型     ②text 字符串(或者char 16, char 32) ③bool 布尔类型    ④real 实数型     


10.创建数据库:
     ①touch st.db     创建数据库文件
     ②sqlite3 st.db     用sqlite3打开
     ③ create table student(id integer primary key, name text, age integer);
          创建     表     表名     第一列名字为id,是主键
     ④.schema     可以看见当前数据库下的所以表,以及表的字段
     ⑤drop table student     删除表
     ⑥alter table student rename to student1;     
       改变     表                    重命名
          alter table student add column sex text;     增加一列
     ⑦insert into student(id,name,age,sex) values(1,'zhang',12,'f');     增加一行
     ⑧select *from student;     查看表的所有信息
     ⑨更新:updata student set age = age + 1;     所有age+1
                  updata student set name = 'li' , sex = 'x' where name = 'zhang' and age = 8;     更新数据
     ⑩删除数据:delete from student where name = 'zhang';     把‘zhang’这一行数据删除


11.常用api:
     (1) int sqlite3_open(const char *filename,sqlite3 **db);
               头文件:#include <sqlite3.h>
               作用:打开数据库,没有就自动创建
               成功返回宏:SQLITE_OK
               编译时要链接sqlite3的库 


     (2)int sqlite3_close(sqlite3 *db);
     
     (3)int sqlite3_exec(sqlite3 *db, const char *sql , sqlite_call back callback, void *para, char **errmsg);
                                                      执行的SQL语句          查询结果传给回调函数  传给回调函数的指针    最后一个为错误信息(一般写 &errmsg, errmsg为char *类型)
               一般,不用查询功能时,参数3和4为NULL
          回调函数:
               int handle_result(void *para, int column_count, char **column_value, char **column_name);
                                          传递的指针     列的总数               列的值(column_value[i])  列的名字
               返回值不是0就是非零,两种;
               写return 0;会遍历整个表,当没有数据的时候,返回0;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值