当前位置: 首页 > news >正文

文件IO 函数 静态库和动态库的创建 5.11

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 目标文件

  1. ar crs libxx.a xx.o 将目标文件创建生成libxxx.a 静态库文件

    静态库的使用:

    1. gcc *.c 路径/libxxx.a
    2. gcc *.c -L路径 -l库名 注意: -L路径 : 路径为库的存放路径

动态库(共享库):libxxx.lib

​ 程序在运行时被链接到代码中执行,目标文件体积不变。

优点:目标文件相对体积小。

缺点:运行时必须有库存在

创建动态库:

  1. gcc -fPIC -c xxx.c

    :将xxx.c 文件编译生成与地址无关的xxx.o目标文件

  2. gcc -share -o libxxx.so xx.o

    :将xxx.o编译成共享的libxxx.so 动态库

使用流程:

  1. gcc *.c -lxxx
http://www.lryc.cn/news/67507.html

相关文章:

  • 考研日语-详解ている、てある、ていく、てくる用法
  • Spring Security 6.x 系列【36】授权服务器篇之OpenID Connect 1.0
  • 【计算机视觉 | Pytorch】timm 包的具体介绍和图像分类案例(含源代码)
  • 轻博客Plume的搭建
  • 机器人关节电机PWM
  • MPU6050详解(含源码)
  • Vue入门学习笔记:TodoList(三):实例中的数据、事件和方法
  • 怎么找到引发回流的JavaScript代码?
  • 未来广告策划,转型还是淘汰?
  • 【vscode远程开发】使用SSH远程连接服务器 「内网穿透」
  • 七天从零实现Web框架Gee - 扩展
  • 什么是土壤水分传感器
  • 月薪17k需要什么水平?98年测试员的面试全过程…
  • 知了汇智:坚持发展产教融合,做好高校、人才与企业之间的桥梁
  • MyBatis缓存-一级缓存--二级缓存的非常详细的介绍
  • macOS Ventura 13.4 RC2(22F63)发布
  • 【为什么可以相信一个HTTPS网站】
  • 4.进阶篇
  • conda init
  • Elasticsearch(二)
  • 工业视觉检测的8个技术优势
  • 16 KVM虚拟机配置-其他常见配置项
  • (转载)从0开始学matlab(第1天)—变量和数组
  • Linux命令·wget
  • API网关简介|TaobaoAPI接入
  • OJ练习第103题——最大矩形
  • JavaScript实现输入年份判断是否为闰年的代码
  • LiangGaRy-学习笔记-Day12
  • LayUI中弹出层select动态回显设置及子页面刷新父页面Table数据方法
  • 浅谈Hutool工具类