19-io_文件权限掩码_动态库_静态库

I/O

* 标准IO:库 带缓存 通过流FILE * 操作文件
* 文件IO:系统调用 不带(内核缓存) 通过文件描述符操作文件
* 文件描述符: !最小未用非负整数 作为一个索引来操作文件使用
open :
  • flags:必须3选1:O_RDONLY,O_WRONLY,O_RDWR
  • O_APPEND 追加
  • O_CREAT 使用这个参数必须指定mode
  • O_EXCL 检查文件是否存在,单独使用文件不存在则报错“r”;结合O_CREAT使用,文件存在则报错。
  • O_TRUNC 清空
  • O_NONBLOCK 非阻塞
文件权限掩码 umask :
  • fopen("1.txt","r");open("1.txt",O_RDONLY|O_EXCL)
  • fopen("1.txt","w+");open("1.txt",O_RDWR|O_CREAT|O_TRUNC,0666)
  • fopen("1.txt","a");open("1.txt",O_WRONLY|O_APPEND|O_CREAT,0666)
* close() ; 关闭文件描述符,不要多次关闭同一个。
* read(fd,void *buf,size); 返回值0表示文件末尾,-1表示错误。
* write();同上
* lseek(文件描述符,偏移量,相对位置同fseek);

圆下箭头一顿号
非凡增减富强针地长    
三乘除,四加减,五移位    
千万别把鱼忘记,它在盛饭的厨子里    
小灯大灯灯灯不等    
爸喂鱼,舅疑惑,裸鸡也疑惑    
十三姨,十四父,十五逗,兜到低
 “圆下箭头一顿号”指的是第15级的运算符。其中圆指的是运算符(),下指的是下标运算符[],
 箭头指的是指向结构体成员运算符->,顿号指的是结构体成员运算符、    
 “非凡增减富强针地长”指的是第14级的运算符。其中非指的是逻辑运算符!,
 凡指的是按位取反运算符~,增减指的是自增和自减运算符++和--,
 富指的是负号运算符-,强指的是类型转换运算符(类型),针指的是指针运算符*,
 地指的是地址运算符&,长指的是长度运算符Sizeof    “三乘除,四加减,五移位”
 指的是第13级到第11级的运算符。其中三四五并无实际意义,只是起区分级别而已。
 也可以想象三指的是第13级运算符。乘除指的是乘法运算符*和除法运算符/,
 加减指的是加法运算符+和减法运算符-,移位指的是左移运算符<<和右移运算符>>    
 “千万别把鱼忘记,它在盛饭的厨子里”指的是求余运算符%,它位于盛饭的厨子里,
 即指和乘法运算符、除法运算符在一起。    “小灯大灯灯灯不等” 指的是第10级到第9级的运算符。
 其中小灯大灯指的是关系运算符<、<=、>和>=,灯灯指的是等于运算符==,
 不等指的是不等于运算符!=    “爸喂鱼,舅疑惑,裸鸡也疑惑”指的是第8级到第4级的运算符。
 其中,爸喂鱼之指的是第8级的按位与运算符&,舅疑惑指的是第7级的按位异或运算符^和
 第6级的按位或运算符||,裸鸡也疑惑指的是第5级、第4级的逻辑与运算符&&和逻辑或
 运算符||    “十三姨,十四父,十五逗,兜到低”指的是第3级到第1级的运算符。
 其中,十三姨指的是条件运算符?: (三有双重含义,即指?:的优先级别是三,
 它的运算符类型也是三目,?难道不是姨即疑惑吗?),十四父的十四没有实际意义,
 父指的是赋值运算符=、+=、-=、*=、/=、%=、>>=、<<=、&=、^=和|= ,十五逗指的是
 第1级的运算符,兜到低指的是15级运算符以,结束。

* stat 获得文件信息 完成ls -l的功能

opendir

readdir

getpwuid

getgrgid

动态库/共享库 :

  • lib库名.so.版本号

  • 静态库

    • lib库名.a
  • 区别

    • 载入时刻 目标代码大小
  • 动态库 运行时载入 相对小一些

  • 静态库 链接时载入 相对大一些

  • 生成动态库

    1.gcc -c -fpic(位置无关码) 库.c -o 库.o

    2.gcc -shared 库.o -o lib库名.so

  • 使用:拷贝动态库到/lib或者/usr/lib下

  • gcc xxx.c -l库名

  • 生成静态库

    1.gcc -c 库.c

    2.ar -cr lib库名.a 库.o

  • 使用:可以和动态库一样使用

  • 也可gcc xxx.c -l库名 -L库的完整路径

推荐阅读更多精彩内容