linux下的系统调用和api有到底有什么区别?

caddor9100 2015-07-26 03:41:16


为什么学习windows api 的时候,没听说过系统调用这种高深的概念。
可是一接触 linux 的文件操作, 很多文章开头就讲解 c库和系统调用区别。

我弱弱的问: 是他们概念不清楚,还是我理解不到位?


c库无非就是满足c语言的基本函数给用户,另外:补充一些自己的函数给用户。

但这并不属于 操作系统api范畴!!!

api 是api !!!

c库和api 可以有一点点关系。 它的作用是类似window下的crt。


还有: api 和系统调用有什么关系? 只是部分api 涉及到系统调用吧?


两个问题, 有点凌乱, 希望大神更正。


...全文
728 6 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
lm_whales 2015-07-26
  • 打赏
  • 举报
回复
引用 4 楼 caddor9100 的回复:
[quote=引用 3 楼 lm_whales 的回复:] 有些早期几乎每个编译器都实现了的库函数,没有进入标准库。
你如果使用过man手册,你肯定有印象: man 1---系统命令 man 2---内核(包括系统调用) man 3---c库 那么api 在man number? 按照man的用法一分,似乎api 在man 2里了。 [/quote]标准库中 stdio.h 中输入输出函数,基本就是对一部分系统调用(API)的封装。 很多编译器的 io.h 中,部分库函数,基本就是 一部分其他系统调用(API)的封装,这部分好像不属于标准库。 man 命令,是UNIX linux 的帮助系统,内核(包括系统调用)基本上对应与API 之所以,API(系统调用),和库函数,关系这么复杂,是因为,标准化,没有吸收所有 unix 库函数(即早期编译器库函数) 而每个编译器,又都增加了自己扩展函数
lm_whales 2015-07-26
  • 打赏
  • 举报
回复
结论: UNIX,linux 有一部分库函数,是系统调用,或者系统调用的某种简单封装 一部分是,其他标准库函数, 一部分是编译器扩展库函数 。 windows SDK,DDK,API 都是独立于编译器的 系统库函数,相当于UNIX,linux的某些系统调用。 而,标准库,封装了一部分 API(系统调用),以及一些常用函数。 通常编译器,另外在库中额外提供一些,同样比较常用的,没有进入标准库的扩展库函数。 widows,DOS 操作系统,和编译器是分家的,微软对二者是分别卖钱的。 UNIX,linux则至少提供一个缺省的,和操作系统一起发行的C编译器,供用户使用。 这是二者一个区别。
caddor9100 2015-07-26
  • 打赏
  • 举报
回复
引用 3 楼 lm_whales 的回复:
有些早期几乎每个编译器都实现了的库函数,没有进入标准库。
你如果使用过man手册,你肯定有印象: man 1---系统命令 man 2---内核(包括系统调用) man 3---c库 那么api 在man number? 按照man的用法一分,似乎api 在man 2里了。
lm_whales 2015-07-26
  • 打赏
  • 举报
回复
有些早期几乎每个编译器都实现了的库函数,没有进入标准库。
lm_whales 2015-07-26
  • 打赏
  • 举报
回复
UNIX是和C共生的,linux 是Unix的某种变体 早期的C库,基本就是unix 系统调用,和一些常用函数库(数学库,字符串库等等)。 后来C因为可移植性好,广泛流传,DOS 上就有四大编译器。 由于,广泛流传,所以后来为了统一和可移植性,就制定了标准。 某些库函数,被标准化了,成了标准库的一部分,另一些没有。 标准化的这一部分,就可以用于任何执行标准的编译器,包括DOS和Windows 上的. 没标准化的部分,只能是unix,linux 专用,其他操作系统上的编译器,也有可能部分自己专用库,或者该操作系统专用库 而操作系统,年最核心功能部分的库函数,unix,linux 就是系统调用(听说是X86 上是 int 80中断啥的)。 DOS是 int21中断,Windows 是API,SDK,DDK等。 有些系统调用,和API 被封装到标准库了,有些没有。

70,020

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧