惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

D
DataBreaches.Net
SecWiki News
SecWiki News
博客园_首页
人人都是产品经理
人人都是产品经理
博客园 - 聂微东
P
Palo Alto Networks Blog
V
Vulnerabilities – Threatpost
Project Zero
Project Zero
WordPress大学
WordPress大学
NISL@THU
NISL@THU
酷 壳 – CoolShell
酷 壳 – CoolShell
P
Privacy & Cybersecurity Law Blog
Jina AI
Jina AI
AWS News Blog
AWS News Blog
Scott Helme
Scott Helme
Martin Fowler
Martin Fowler
C
Cybersecurity and Infrastructure Security Agency CISA
Forbes - Security
Forbes - Security
H
Heimdal Security Blog
小众软件
小众软件
I
Intezer
A
Arctic Wolf
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
K
KPMG report finds enterprise disconnect between AI and its ROI | CIO
O
OpenAI News
S
Security Affairs
阮一峰的网络日志
阮一峰的网络日志
Latest news
Latest news
G
GRAHAM CLULEY
Blog — PlanetScale
Blog — PlanetScale
J
Java Code Geeks
N
News and Events Feed by Topic
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
V2EX - 技术
V2EX - 技术
Stack Overflow Blog
Stack Overflow Blog
www.infosecurity-magazine.com
www.infosecurity-magazine.com
L
LINUX DO - 最新话题
博客园 - Franky
P
Proofpoint News Feed
aimingoo的专栏
aimingoo的专栏
博客园 - 司徒正美
P
Proofpoint News Feed
S
Secure Thoughts
Google DeepMind News
Google DeepMind News
Microsoft Security Blog
Microsoft Security Blog
T
The Exploit Database - CXSecurity.com
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
C
CXSECURITY Database RSS Feed - CXSecurity.com
F
Full Disclosure
Security Latest
Security Latest

博客园 - taizi

Redhat5 网络配置(转) RPM 用法 Beginning Linux Programming----The Standard I/O Library Beginning Linux Programming----Low-level File Access (3) Beginning Linux Programming----Low-level File Access (2) Beginning Linux Programming----Low-level File Access (1) Beginning Linux Programming----System Calls and Device Drivers 细细品味UNIX的数据流重定向(摘) /dev/null 和/dev/zero(摘) Beginning Linux Programming----Linux File Structure Beginning Linux Programming----shell脚本程序实例 Beginning Linux Programming----dialog Utility Beginning Linux Programming----Debugging Scripts Beginning Linux Programming----Here Documents Beginning Linux Programming----Command Execution,Arithmetic Expansion,Parameter Expansion Beginning Linux Programming----Grep Beginning Linux Programming----Find Bash提示小窍门 Beginning Linux Programming----Commands(2)
Beginning Linux Programming----Library Functions
taizi · 2008-04-05 · via 博客园 - taizi

在直接使用低级系统调用时,在输入输出上会存在这样一个问题,就是这些调用存在着效率低的状况。为什么会这样呢?下面我们来分析一下:

  • 在产生一个系统调用时会出现性能恶化的状况,因此系统调用跟函数调用相比,要浪费得多。这是因为Linux不得不从你正在运行的程序转到正在执行它的内核代码上,然后再倒转回去。所以最好的方法就是在一个程序中使用最少的系统调用来完成尽可能多的工作,比如,宁愿每次读取或者写入大量数据也不愿读取或写入单个字符。

  • 硬件都有其局限性,因此限制了每次低级系统调用所能读取或写入的数据块的尺寸大小。比如,磁带设备通常写入数据的块大小为10k。因此,如果你想要写入的量不是10k的倍数的话,则设备将预支磁带到下一个10k数据块,同时剩余的空白将遗留在磁带上。
  • 为了提供一个高级的接口到设备和磁盘文件,一个Linux或UNIX发行版提供了一些标准库,它们都是可以放入你程序中用来处理这些问题的函数集。比如标准I/O库,它提供了输出缓冲区。这样你就可以有效地以不同的尺寸写入数据块,且为低级系统调用所安排的库函数也以使数据有效的整数据块的方式而被提供。通过这些方式都戏剧化地降低了系统调用的总开销。

    库函数通常保存在手册的第三部分,且库函数通常都有一个与它们相关的标准include文件,比如标准I/O库的stdio.h文件。

    为了概括地了解我们所讨论的内容,下图是Linux下,不同的文件函数同用户、设备驱动、内核以及硬件间的联系: