Bootstrap

那些数据库函数那些事儿

stdio
1.基本概念
文件:
    一组相关数据的集合 
文件名:
    01.sh //文件名 

2.linux下的文件类型 
  b block         块设备文件   eg: 硬盘 
  c character     字符设备文件 eg: 鼠标,键盘
  d directory     目录文件     eg: 文件夹 
  - regular       常规文件     eg: 1.txt 01.sh xx.bmp 
  l symblink      软链接       eg: 快捷方式
  s socket        套接字       eg: 网络通信用
  p pipe          管道         eg: 进程间通信 
  
3.思想 
  linux中一个核心思想 
  everything is file!
  一切皆文件 
  
4.文件的基本操作 
 打开(新建)
 输入(写数据)
 阅读(读取)
 删除 
 插入
 修改 
 关闭 (保存)
 
 //研发 
 1.打开 
 2.写 
 3.读 
 4.关闭 

5. linux操作文件的函数 
   两套函数 (两套操作路径)
   
   (1) 系统调用 --- 内核提供的函数      
   (2) 库函数   --- 第三方提供的函数 
   
  (1).库函数 
    c library  // c库函数 

    集成了很多功能函数 
    //标准输入输出 
    //数学函数 
    //... 
     -lm 
    #include <math.h>
    
    标准输入输出 --- stdio 文件操作 
    
    标准io; stdio.h
1.标准io的概念 
    1975 Dennis r IO库,
    从C语言的标准,ANSI c 
    IO  input  output
    I: 键盘是标准输入设备 ====》默认输入就是指键盘  /dev/input
    O: 显示器是标准输出设备 ==》默认输出就是指显示器
    
    Linux操作系统当中IO都是对文件的操作
    C一部分,任何支持标准C的系统都可使用标准IO实现文件存储
    标准IO在UNIX上是对文件IO的封装
   
    一般都是对普通文件操作是一种有缓存的IO 在文件IO和用户程序之间,
    加入缓冲区,可以有效减少系统调用的次数,节省系统IO调度资源
    
    说明:
    标准IO库,不单单是linux上有,在windows,Mac os上都有。
    很多操作系统都实现了标准IO库。
    都是依据IOS C标准实现的。
    所以基本保证了可移植性。
    但是因为标准和具体实现之间的差异,
    未必敢保证所有的函数在都可以相互通用。
    
    标准IO都干了些啥?
    标准IO处理了很多细节:
    (1).处理缓冲区分配   (缓存--提高效率 --- 慢速 快速)
    (2).读写IO的块长度的优化
    (3).对系统调用进行了封装,内部对应的"文件描述符" 
    
    好处:
        用户使用方便,不必再担心如何选择正确的块长度。
    //地位:
        标准I/O库是由 Dennis Ritchie在1975年左右编写的。
        它是Mike Lesk编写的可移植I/O库的主要修改版本。
        令人惊讶的是,50年来,几乎没有对标准I/O库进行修改。
    
6. 函数接口 
  
 1.打开 -- fopen  //file open  
 2.写/读 
   //按字符读写 
   fgetc/fputc 
   //按行读写 
   fgets/fputs 
   //按对象读写
   fread/fwrite   
 3.关闭 
   fclose --- file close

  fopen 
  打开数据库中的函数的解释及用法说明
  man手册的内容 
      Name 名字+简短说明 
      SYNOPSIS 头文件 + 函数原型 
      DESCRIPTION 函数的一些实用细节说明   
      RETURN VALUE 返回值
  FILE * fopen(const char *pathname,const char *mode);
  功能:
         流打开函数
  参数:
     @pathname --- 要打开的文件名 //字符串形式的名字 
     @mode     --- 打开的模式 
       r   --- 只读  
       r+  --- 读写 
               说明: 带r的 要求,文件必须存在 ,如果不存在,就会报错
       w   --- 只写 
       w+  --- 读写 
               说明:  
                   文件存在 ,截断成 0长度 
                   不存在,则创建
       a  --- 追加(写)
       a+ --- 读写 
              说明:
                 读 从头读 
                 写 从末尾开始写 
                 文件存在 则打开做写操作即可 
                 文件不存在 创建文件 
  返回值:
     成功 FILE*指针  //文件指针 流指针 --- 从程序上讲,FILE *指针就代表打开的这个文件
     失败 NULL 同时 errno会被设置 
     
  void perror(const char *s);
  功能:
      打印错误信息 
  参数:
    s  //用户自定义字符串 
     
 
 //读写函数 
 fgetc / fputc 
 
 int fgetc(FILE * stream);
 功能:
     从文件中读取字符 
 参数:
     @stream 表示要读取的文件对应的流指针 
 返回值:
     成功 对应字符的ASCII码值 
     失败 EOF 到达文件结尾 
          出错 
          
问题:
   EOF  
   文件中有没有 EOF?  //只是到达结尾时的一个标志

   
  int fputc(int c,FILE *stream);
  功能:
      将一个字符输出到指定的流(文件)
  参数:
    @c          //要输出的字符 ---ascii码值
    @stream     //指定的文件 
  返回值:  
    成功 被写入的字符的ASCII码值
    失败 EOF 
    
系统默认打开的流指针:
stdin  //标准输入 
stdout //标准输出 
stderr //标准出错 --- 屏幕  --- 可以专门把错误信息输出到 stder
   
 //关闭:
  fclose 
  
  int fclose(FILE *stream);
  功能:
     关闭文件 
      刷新流
      关闭了底层文件描述符
 返回值:
   成功 0
   失败 EOF
   注意,不要多次重复关闭
   
操作函数:
1.打开 -fopen 
2.读/写 
  fgetc/fputc  
3.关闭 
  fclose
  
//按行读写 ---按字符串读写 
   fgets / fputs 
   
char * fgets(char*s,int size,FILE*stream)
功能:
   从stream中读取size-1个字符,到s指向的空间 
参数:
  @s        //存放读取到的数据 对应的内存空间 
  @size     //指定一次最多读取多少个字符 
  @stream   //表示要读取的文件 
返回值:
   成功 返回s
   失败 NULL 
        读到文件结尾 也 返回NULL 

        
注意:
   fgets读取结束:
   1. EOF
   2. '\n'
   3. size-1
   
   int fputs(const char *s, FILE *stream);
   功能:
      输出s到stream中
   参数:
    @s 代表要输出的字符串 
    @stream 代表 输出到的文件 
   返回值:
    成功 非负数 
    失败 EOF
    
  注意:
     不会将 '\0' 输出 

 "123" --- 文本文件 --- '1''2''3'  //每个数据是按照固定的编码格式存放的 -ASCII
 123   --- 二进制   --- 01111011   //
 
 linux下操作时 ,没有区别 
 windows下区别 
 
 说明:
    1.fgets 和 fputs 在拷贝 二进制文件时 可能出问题 
    
printf() <=> fprintf(stdout,);    
   

 

;