系统调用和库函数调用
发表于:2025-02-07 作者:千家信息网编辑
千家信息网最后更新 2025年02月07日,借鉴https://blog.csdn.net/lf_2016/article/details/54587020系统调用:用户直接调用操作系统暴露出来的接口,这种方式成为系统调用。文件I/O操作就是系
千家信息网最后更新 2025年02月07日系统调用和库函数调用
借鉴https://blog.csdn.net/lf_2016/article/details/54587020
系统调用:用户直接调用操作系统暴露出来的接口,这种方式成为系统调用。
文件I/O操作就是系统调用, man手册,man 2 就是查询系统调用API,
常用的API有open close read write lseek fcntl
库函数调用:对操作系统暴露出来的接口进行封装形成了库函数,提供给用户调用。
标准文件I/O操作就是库函数调用,man手册,man 3 就是查询库函数接口。
常见的标准库函数fopen fread fwrite
实际上库函数是对系统调用的一层封装,因此库函数对文件操作的时候,必然会引起系统调用。也就是说,库函数调用实际上是通过系统调用实现的。例如:C库函数fwrite就是通过write实现的。
库函数调用可以大大减少系统调用的次数,这是因为缓冲区技术。在用户空间和内核空间,对文件都使用了缓冲区,当内核缓冲区写满之后或写结束之后才将内核缓冲区内容写到文件对应的硬件媒介中。
#include#include #include int open(const char *pathname,int flags,int perms);flags:O_RDONLY O_WRONLY O_RDWR O_CREAT 若文件不存在,则创建一个新的文件,并用第三个参数为其设置权限。 O_TRUNC 若文件已经存在,那么会删除文件中的全部原有数据,并且设置文件大小为0 O_APPEND 以添加方式打开文件返回值:成功返回文件描述 失败返回-1int fd;fd = open("test.txt",O_RDWR|O_CREAT|O_TRUNC);if(fd < 0){ perror("fail to open");}
#includeint close(int fd);返回值:成功返回0 失败返回-1
#includessize_t write(int fd,const void *buf,size_t count);功能:像文件描述符fd所指向的文件中写入,从buf开始的缓冲区中count个字节返回值:成功时返回写入的字节数(若为零则表示没有写入数据) 失败时返回-1,并设置errno为相应值。
#includessize_t read(int fd,void *buf,size_t count);功能:从文件描述符fd中读取count字节的数据并放入buf开始的缓冲区中。返回值:成功时返回读取到的字节数 失败时返回-1,并设置errno为相应值。
#include#include off_t lseek(int fd, off_t offset, int whence);/***offset:相对与基准点whence的偏移量,以字节为单位,正数表示向前移动,复数表示向后移动*whence:SEEK_SET 文件的起始位置 SEEK_CUR 文件当前读写位置 SEEK_END 文件的结束位置**/返回值:成功时,定位到文件当前读写位置 失败时,返回-1,并设置errno为相应值
#define OFFSET 10240int read_len;lseek(fd,-OFFSET,SET_END);while((read_len = read(fd,buf,sizeof(buf))) > 0) //读多少,写多少{ write(fdd,buf,read_len);}
文件
函数
系统
缓冲区
缓冲
成功
字节
就是
位置
内核
接口
数据
用户
操作系统
功能
实际
实际上
手册
方式
标准
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
数据库多个子表
新华三网络技术认证培训
数据库逻辑设计是表吗
软件开发不需要写代码
第三方复制数据库文件夹
数据库技术与应用作业摘要
百度网络安全红线总结
魔兽连不上服务器
递归服务器是域名公司的吗
怀柔区大型软件开发价位
前端修改表格数据库
内蒙古软件开发服务有哪些
随着信息化和网络技术
生产控制系统网络安全防护
万象天龙8无法连接服务器
上海抽点互联网有限科技公司
计算机专业学计算机网络技术
安卓软件开发 java
安徽进销存软件开发平台
如何服务器上安装软件
莱阳安卓软件开发外包公司
北京 网络技术研究所
网络安全对国家有什么影响
无法解析服务器数据
网络技术识别
计算机网络技术填空题评分
洛阳有哪些软件开发
魔兽世界迦拉克隆服务器
数据库的技术基础学什么
联想sr590服务器亮蓝色