首页 > 其他分享 >系统调用与库函数是什么,区别是什么

系统调用与库函数是什么,区别是什么

时间:2024-05-07 20:23:57浏览次数:14  
标签:文件 调用 区别 什么 系统 内核 库函数

系统调用与库函数是什么,区别是什么

今天学习到了文件IO方面,知道了在Linux中使用命令mkdir创建的并不是文件夹而是目录,有很多人喜欢将此认为是文件夹,严格意义上俩者是有很大的不同,今天通过查询资料得知俩者的区别,希望一下对于疑惑的你有所帮助。

目录

系统调用

系统调用是通向操作系统本身的接口,是面向底层硬件的。通过系统调用,可以使得用户态运行的进程与硬件设备(如CPU、磁盘、打印机等)进行交互,是操作系统留给应用程序的一个接口。下面适用于访问设备驱动程序的系统调用:

open: 打开文件或设备

read: 从打开的文件或设备中读取数据

write: 向打开的文件或设备中写入数据

close: 关闭文件或设备

ioctl: 把控制信息传递给设备驱动文件

用户进程需要发生系统调用时,内核将调用内核相关函数来实现(如sys_read(),sys_write(),sys_fork())。用户程序不能直接调用这些函数,这些函数运行在内核态,CPU 通过软中断切换到内核态开始执行内核系统调用函数。

步骤:用户态–>系统调用–>内核态–>返回用户态

拷贝的老师的图,读写操作

库函数

库函数(Library function)是把函数放到库里,供别人使用的一种方式。.方法是把一些常用到的函数编完放到一个文件里,供不同的人进行调用。一般放在.lib文件中。库函数调用则是面向应用开发的,库函数可分为两类,一类是C语言标准规定的库函数,一类是编译器特定的库函数。(由于版权原因,库函数的源代码一般是不可见的,但在头文件中你可以看到它对外的接口)。

系统调用是为了方便使用操作系统的接口,而库函数则是为了人们编程的方便。

库函数调用与系统无关,不同的系统,调用库函数,库函数会调用不同的底层函数实现,因此可移植性好。由于库函数是基于c库的,因此不能用于内核对于底层驱动设备的操作。

区别

(1)库函数是语言或应用程序的一部分,而系统调用是内核提供给应用程序的接口,属于系统的一部分。

(2)库函数在用户地址空间执行,系统调用是在内核地址空间执行,库函数运行时间属于用户时间,系统调用属于系统时间,库函数开销较小,系统调用开销较大。

(3)库函数是有缓冲的,系统调用是无缓冲的。

(4)系统调用依赖于平台,库函数并不依赖。

参考

系统调用与库函数是什么,区别是什么
(https://blog.csdn.net/lht1314tttt/article/details/79150776 "系统调用与库函数是什么,区别是什么")

标签:文件,调用,区别,什么,系统,内核,库函数
From: https://www.cnblogs.com/xiaobaibudongjiuwen/p/18178303

相关文章

  • 【Azure Function】Function App启动时出现 Failed to open local port 4001 错误,这是
    问题描述在使用AzureFunction时,启用了多个槽(slot),方便在部署生产环境的时候直接切换。{"IsEncrypted":false,"Values":{"AzureWebJobsStorage":"UseDevelopmentStorage=true","FUNCTIONS_WORKER_RUNTIME":"dotnet-isolate......
  • 解决远程调用三方接口:javax.net.ssl.SSLHandshakeException:sun.security.validator.Va
    一、前言最近在对接腾讯会议API接口,在鉴权完成后开始调用对方的接口,在此过程中出现调用报错:javax.net.ssl.SSLHandshakeException。二、出现原因当你在进行https请求时,JDK中不存在三方服务的信任证书,导致出现错误javax.net.ssl.SSLHandshakeException:sun.security.validator.Va......
  • if __name__ == '__main__' 是什么意思
    __name__是python中的内置变量,表示当前模块/方法/函数的名称当.py文件被直接运行时,ifname=='main'之下的代码块将被运行;当.py文件以模块形式被导入时,ifname=='main'之下的代码块不被运行。如:定义const.pyPI=3.14defmain():print("PI:",PI)if__name__=='......
  • 什么是io?程序员该怎么理解io
    引言很多程序员会谈及IO,仿佛是种时尚或者给自己贴金的方式,因为提上它一般会涉及应用程序的性能相关话题,离高深的底层知识更接近了。但多数人的理解其实是模糊的,他们的脑海里会浮动着抽象的场景:IO就是输入输出啊,电脑在磁盘上读写就是IO,仅此而已,或者,更高明一点,他们隐隐约约的意识到......
  • 为什么会查询不到DNS信息?怎么排查?
    DNS(域名系统)是将域名转换为相应IP地址的关键系统。查询DNS信息具有重要作用,通过查询DNS信息,我们可以知道域名对应的IP地址,这是最主要的信息,使设备能与目标服务器进行通信;其次是域名的相关记录,如MX记录(邮件交换记录)等,了解与邮件服务相关的信息;以及域名的状态,如是否正常等......
  • Jmeter调用java代码
    加密:MD5、Base64、SHA、RSA、签名混合加密:jmeter的md5加密函数:BeanShell调用java代码: 调用jar包:1)在测试计划中引入jar包2)调用代码 ......
  • Canvas简历编辑器-我的剪贴板里究竟有什么数据
    Canvas图形编辑器-我的剪贴板里究竟有什么数据在这里我们先来聊聊我们究竟应该如何操作剪贴板,也就是我们在浏览器的复制粘贴事件,并且在此基础上聊聊我们在Canvas图形编辑器中应该如何控制焦点以及如何实现复制粘贴行为。在线编辑:https://windrunnermax.github.io/CanvasEdito......
  • dubbo2.7.x版本下,服务调用时参数丢失问题
    问题:A服务调用B,C两个服务,在A调用之前RpcContext设置了业务上的透传参数,希望在本次调用全程,在任何地方都能获取到这个参数,但是在A调用完B后,该参数丢失。排查:代码中自定义实现了两个filter,分别时provider和consumer两个Filter,但里面都没有清空参数的逻辑。后面经过排查,dubbo有个......
  • 排查Java反射调用的InvocationTargetExcetion问题
    在Java中通过反射调用方法时,常见的一个异常是:java.lang.reflect.InvocationTargetException,将异常信息打印到日志文件中时通常会有如下一句信息:java.lang.reflect.InvocationTargetException:null,由于在异常信息中存在"null",一开始就会非常敏感,会误以为是空指针异常。其实不然,从......
  • uniapp renderjs "只能行内调用, 不能通过方法调用" 学习
    故障代码app报错(h5正常),说echarts为undefined。<viewclass="content"><button@click="get"@touchend="update">update</button><imgsrc=""alt="我是alt"id="img"/></vi......