18-io_ctags配置

I/O

man 1 命令

man 2 系统调用 内核给用户留出的接口

man 3 库 以二进制形式存在的函数集合

文件类型 :
  • -普通文件 ( 二进制、ASCII )
  • p 管道
  • d 目录
  • s 套接字
  • l 链接
  • c 字符设备
  • b 块设备
Input:
  • 输入:数据由内核空间流向用户空间
流:
  • 用来表示数据的方向
  • 标准IO中 系统预定义的3个流:
    • stdin标准输入
    • stdout标准输出
    • stderr标准错误
标准IO缓冲区:
  • 全缓存:操作文件,大小4k,刷新fflush
  • 行缓存:操作终端(stdin、stdout),大小1024字节,遇到\n刷新
  • 不缓存:stderr
* FILE * 流指针 是一个结构体,用来描述文件
* 文件指针:一个long型表示文件的位置
* perror();打印最后一次系统错误信息
标准IO操作文件的方式:
  • feof用来判断是否到达文件末尾,到达文件末尾返回非零值。

函数:

fopen :
  • fopen(path,mode);成功返回FILE *,错误返回NULL并且设置errno。
  • mode:
    • r:只读,文件指针指向文件开头,如果文件不存在则报错。
    • r+:读写,文件指针指向文件开头,如果文件不存在则报错。
    • w:清空,只写,文件不存在则创建,文件指针指向文件开头
    • a:追加,只写到末尾,文件不存在则创建,文件指针指向文件末尾。
    • a+:追加,读写,写到末尾,文件不存在则创建,初始时读文件指针指向开头。
    • 操作二进制文件:rb,rb+,ab+
fclose :
  • 关闭流
  • fclose(FILE *);
  • 不要多次关闭同一个流
fprintf :
  • 同printf
  • (FILE * , 后同printf );
fseek :
  • 通过fseek对文件指针进行操作
  • fseek(FILE *,offset,whence);
  • offset:+表示向后偏,-值表示向前偏
  • whence:
    • SEEK_SET文件头
    • SEEK_CUR当前位置
    • SEEK_END文件末尾
  • ftell告知当前指针位置
  • rewind偏移指针到头。
按字符
  • fgetc/getc
  • fputc/putc
按行
  • fgets(char *s,size,FILE *) ; 读取size-1个字符存放到s里,最后一个位置存放\0 , fgets 遇到 EOF 或者 \n 会停止。
  • fputs(char *s,FILE *) ;
按块
  • fread(void *,size,nmemb,FILE *) ; 返回值为成功读取的对象的个数,操作ASCII码文件是尽量使用char *。注意返回值对fwrite操作的影响。
  • fwrite同上。
* 不建议使用的函数gets
* 操作文件时,遇到全缓存要注意使用fflush刷新。

追踪代码:

  • ctags追踪代码 vim -t 变量/类型
  • 选择合适的代码之后继续追踪,光标移动,ctrl+]
  • vim -t需要安装ctags
    • 解压内核 tar -vxf 压缩文件
    • 切换到内核目录下ctags -R 生成tags文件
    • 配置~/.vimrc 加入一行 set tags+=tags路径

推荐阅读更多精彩内容