Linux基础 | 库函数、系统调用以及文件操作


前言

本文简单介绍记录一下系统调用和库函数的区别

提示:以下是本篇文章正文内容,下面案例可供参考

一、什么是系统调用与库函数

系统调用是在程序中能用类似函数调用方式调用的操作系统服务的集合;库函数(Library function)是将函数封装入库,供用户使用的一种方式。

二、区别与联系

1.区别

系统调用的实现在内核中,属于内核空间,库函数的实现在函数库中,属于用户空间。

2.一些文件操作常使用的系统调用

int open():打开一个文件
int close():关闭一个文件
int write():向文件中写入数据
int read():从文件中读取数据
Linux不分文件是文本文件还是二进制文件

3.调用过程

在这里插入图片描述

当执行open函数时,程序产生中断,现场保护,此时把open的系统调用号5写入eax寄存器中,然后从用户态切换到内核态,然后找到5对应的系统调用表,执行以后,把返回的文件描述符3放入eax寄存器中带回,现场恢复,恢复中断,程序从eax中拿到打开文件的描述符,继续向下执行。

三、父子进程共享同一文件

1.文件描述符

在这里插入图片描述

2.代码示例

在这里插入图片描述
在这里插入图片描述
输出:

从结果可以看出,打开一个文件之后执行fork,父子之间可以共享一个文件资源,包括文件的起始偏移量等。

总结

在这里插入图片描述

系统调用的主要开销是从用户态切换到内核态的时间,也正是如此printf才会设置缓冲区,很多库函数的底层也封装了系统调用。
先打开文件再fork,此时父子进程拥有同样的struck_file

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值