网站建设 食品搜索引擎营销特点
5.11
文件IO函数
1.数据读写
ssize_t read(int fd,void *buf,size_t count);
功能:
从fd对应的文件中 读取前count个字节的数据到buf缓冲区中
头文件:
#include <unistd.h>
参数:
fd :文件描述符
buf:缓冲区首地址
count:要读取的字节数
返回值:
成功:
>0 : 实际读取到的字节数
=0:读取到文件末尾
失败:-1 并设置错误信息
ssize_t write(int fd,void *buf,size_t count);
功能:
将buf缓冲区前count个字节的数据写入fd对应的文件的中
头文件:
#include <unistd.h>
参数:
fd :文件描述符
buf:缓冲区首地址
count:要读取的字节数
返回值:
成功:
>0 : 实际读取到的字节数
失败:-1 并设置错误信息
int close(int fd);
关闭文件,但不同于fclose,因为没有缓存所以不能关闭缓存
off_t lseek(int fd,off_t offset,int whence);
功能:
将fd对应文件中的指针,以whence为基准点,偏移offset字节
头文件:
#include <sys/types.h>
#include <unistd.h>
参数:
fd:文件描述符
offset:偏移量
whence:基准点(SEEK_SET ,SEEK_CUR ,SEEK_END)
返回值:
成功:返回实际偏移量
失败:-1,并设置错误信息
动态库和静态库的分析
库:
是一段可执行的 “二进制” 代码,能被操作系统加载到内存中运行的。
C库是个静态库。
静态库:libxxx.a
程序在编译阶段就链接到目标代码中,目标代码体积变大。
优点:程序运行时不依赖任何库。
缺点:目标文件体积变大。
创建静态库流程:
1. gcc -c xx.c 生成 xx.o 目标文件
-
ar crs libxx.a xx.o 将目标文件创建生成libxxx.a 静态库文件
静态库的使用:
- gcc *.c 路径/libxxx.a
- gcc *.c -L路径 -l库名 注意: -L路径 : 路径为库的存放路径
动态库(共享库):libxxx.lib
程序在运行时被链接到代码中执行,目标文件体积不变。
优点:目标文件相对体积小。
缺点:运行时必须有库存在
创建动态库:
-
gcc -fPIC -c xxx.c
:将xxx.c 文件编译生成与地址无关的xxx.o目标文件
-
gcc -share -o libxxx.so xx.o
:将xxx.o编译成共享的libxxx.so 动态库
使用流程:
- gcc *.c -lxxx