社区应用
帖子
相册
日志
群组
热榜
分享
记录
最新帖子
精华区
社区服务
道具中心
会员列表
统计排行
基本信息
到访IP统计
管理团队
管理操作
在线会员
会员排行
版块排行
帖子排行
标签排行
银行
美国主机网
知识库
资源总汇贴
帮助
下拉
用户名
UID
电子邮箱
记住
找回密码
登录
注册
微博帐号登录
内容互通,快速登录
淘宝帐号登录
支付宝登录
我的快捷通道
关闭
您还没有登录,快捷通道只有在登录后才能使用。
立即登录
还没有帐号? 赶紧
注册一个
美国主机支持论坛
落伍中介交易
帖子
日志
用户
版块
群组
帖子
搜索
热搜:
蓝色天空
水墨江南
黑色旋风
绿意盎然
紫色梦幻
书签
网站技术
综合讨论
谈天说地
美国空间
IXWebhosting
公告区
关闭
选中
1
篇
全选
修改MYSQL密
我刚买的ju
ixwebhosting
慕容晓晓
李嘉石祝福有情人 《姑娘别走》MV首发活泼风格
美国各大VPS性能比较
美国各大VPS性能比较
vsftpd-ftp服务器的安装配置
如何选择一款最好的免费邮件服务器
[切换到宽版]
最新帖子
精华区
书签
美国主机支持论坛
>
网站技术
>
linux上系统调用和库函 ..
发帖
回复
« 返回列表
新帖
968
阅读
0
回复
linux上系统调用和库函数调用的区别
本站代购的美国服务器详细列表
usidc5
UID:1
注册时间
2010-02-05
最后登录
2012-02-23
在线时间
454小时
发帖
6294
搜Ta的帖子
精华
42
金币
2497
威望
2887
贡献值
0
元宝
0
访问TA的空间
加好友
用道具
级别:
管理员
发帖
6294
金币
2497
威望
2887
贡献值
0
元宝
0
关注Ta
发消息
只看楼主
更多操作
倒序阅读
复制链接
使用道具
楼主
发表于: 01-20
从程序完成的功能来看,函数库提供的函数通常是不需要操作系统的服务. 函数是在用户空间内执行的,除非函数涉及到I/O操作等,一般是不会切到核心态的。系统调用是要求操作系统为用户提供进程,提供某种服务,通常是涉及系统的硬件资源和一些敏感的软件资源等。
函数库的函数,尤其与输入输出相关的函数,大多必须通过Linux的系统调用来完成。因此我们可以将函数库的函数当成应用程序设计人员与系统调用程序之间的一个中间层,通过这个中间层,我们可以用一致的接口来安全的调用系统调用。这样程序员可以只要写一次代码就能够在不同版本的linux系统间使用积压种具体实现完全不同的系统调用。至于如何实现对不同的系统调用的兼容性问题,那是函数库开发者所关心的问题。
从程序执行效率来看,系统调用的执行效率大多要比函数高,尤其是处理输入输出的函数。当处理的数据量比较小时,函数库的函数执行效率可能比较好,因为函数库的作法是将要处理的数据先存入缓冲区内,等到缓冲区装满了,再将数据一次写入或者读出。这种方式处理小量数据时效率比较高,但是在进行系统调用时,因为用户进程从用户模式进入系统核心模式,中间涉及了许多额外的任务的切换工作,这些操作称为上下文切换,此类的额外工作会影响系统的执行效率。但是当要处理的数据量比较大时,例如当输入输出的数据量超过文件系统定义的尽寸时,利用系统调用可获得较高的效率。
从程序的可移植性的角度来看,相对于系统调用,C语言的标准备函数库(ANSI C) 具备较高的可移植性,在不同的系统环境下,只要做很少的修改,通常情况是不需要修改的。
Linux C中库函数和系统调用的区别
摘自:The Linux Kernel Module Programming Guide
库函数是高层的,完全运行在用户空间, 为程序员提供调用真正的在幕后完成实际事务的系统调用的更方便的接口。系统调用在内核态运行并且由内核自己提供。标准C库函数printf()可以被看做是一个通用的输出语句,但它实际做的是将数据转化为符合格式的字符串并且调用系统调用 write()输出这些字符串。
是否想看一看printf()究竟使用了哪些系统调用? 这很容易,编译下面的代码。
#include <stdio.h>
int main(void)
{
printf("hello");
return 0;
}
使用命令
gcc -Wall -o hello hello.c
编译。用命令 strace hello 跟踪该可执行文件。是否很惊讶? 每一行都和一个系统调用相对应。 strace是一个非常有用的程序,它可以告诉你程序使用了哪些系统调用和这些系统调用的参数,返回值。 这是一个极有价值的查看程序在干什么的工具。在输出的末尾,你应该看到这样类似的一行 write(1, "hello", 5hello)。这就是我们要找的。藏在面具printf() 的真实面目。既然绝大多数人使用库函数来对文件I/O进行操作(像 fopen, fputs, fclose)。 你可以查看man说明的第二部分使用命令man 2 write 。man说明的第二部分专门介绍系统调用(像kill()和read())。 man说明的第三部分则专门介绍你可能更熟悉的库函数(像cosh()和random())。
你甚至可以编写代码去覆盖系统调用,正如我们不久要做的。骇客常这样做来为系统安装后门或木马。 但你可以用它来完成一些更有益的事,像让内核在每次某人删除文件时输出 “ Tee hee, that tickles!” 的信息。
本帖最近评分记录:
共
条评分
隐藏
相关话题
美国各大VPS性能比较
美国各大VPS性能比较
vsftpd-ftp服务器的安装配置
Linux下添加硬盘,分区,格式化详解
Adobe Source Libraries-adobe开源库介绍
VC开发WebService客户端
PHP最佳安全实践
关键词:
linux
编程
c++
QQ: 378890364 微信:wwtree(省短信费) 紧急事宜发短信到0061432027638
欢迎加入本论坛超级QQ群:122538123
回复
引用
举报
顶端
发帖
回复
« 返回列表
http://www.usidcbbs.com
访问内容超出本站范围,不能确定是否安全
继续访问
取消访问
描述
快速回复
您目前还是游客,请
登录
或
注册
限 100 字节
如果您提交过一次失败了,可以用”恢复数据”来恢复帖子内容
进入高级模式
加粗
字体颜色
背景颜色
插入链接
图片
认证码:
提 交
回复后跳转到最后一页
上一个
下一个
隐藏
快速跳转
公告区
本站公告
站长工具箱
网站地图工具
续费管理工具
综合讨论
综合讨论
网站优化
新手求助
美国空间
IXWebhosting
Godaddy
Justhost
Hostgator
美国VPS
Photonvps
Swvps
美国服务器
Serverpoint
LUCN
Krypt
FDC
100TB/Softlayer
站长专区
谈天说地
网赚流量
网站技术
关闭