系统调用和库函数调用
发表于:2025-12-02 作者:千家信息网编辑
千家信息网最后更新 2025年12月02日,借鉴https://blog.csdn.net/lf_2016/article/details/54587020系统调用:用户直接调用操作系统暴露出来的接口,这种方式成为系统调用。文件I/O操作就是系
千家信息网最后更新 2025年12月02日系统调用和库函数调用
借鉴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安全错误
数据库的锁怎样保障安全
知网本科生论文查重数据库有哪些
数据库学生选课系统设计报告
二手电脑服务器
现在是科技时代还是互联网时代
网络安全的爬虫啥意思
mysql删除一个月前数据库
奇迹暖暖清除数据库
做数据库
湖北定制化服务器价格多少
政务网络技术发展趋势
服务器网卡设置trunk
组态王如何删除报表数据库
全球网络安全公司排行
数字图书馆软件开发
通过保密认证的软件开发商
2022哇嘎连不上服务器
腾讯云服务器快照
廊坊软件开发参考价
如何在局域网中建立服务器
软件开发工程师泄密
西安市公安局网络安全大队
宋玉玉 网络安全
数据库是软件开发类吗
滕州网络安全宣传片
计算机三级网络技术是上机考吗
软件开发专业专科学校
币安怎么无法连接服务器
网络安全大赛CTF是真吗
大连软件开发侯坡
与网络安全的小知识