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

推荐订阅源

The Register - Security
The Register - Security
IT之家
IT之家
阮一峰的网络日志
阮一峰的网络日志
博客园 - 叶小钗
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
S
SegmentFault 最新的问题
有赞技术团队
有赞技术团队
博客园 - 【当耐特】
The Cloudflare Blog
T
The Blog of Author Tim Ferriss
Apple Machine Learning Research
Apple Machine Learning Research
C
Check Point Blog
Microsoft Azure Blog
Microsoft Azure Blog
V
V2EX
量子位
F
Fortinet All Blogs
Martin Fowler
Martin Fowler
大猫的无限游戏
大猫的无限游戏
Last Week in AI
Last Week in AI
博客园 - 聂微东
美团技术团队
Stack Overflow Blog
Stack Overflow Blog
Google DeepMind News
Google DeepMind News
宝玉的分享
宝玉的分享
M
MIT News - Artificial intelligence
U
Unit 42
罗磊的独立博客
MyScale Blog
MyScale Blog
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
V
Visual Studio Blog
Jina AI
Jina AI
Recorded Future
Recorded Future
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
小众软件
小众软件
H
Help Net Security
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
MongoDB | Blog
MongoDB | Blog
N
Netflix TechBlog - Medium
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
B
Blog
J
Java Code Geeks
爱范儿
爱范儿
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
aimingoo的专栏
aimingoo的专栏
B
Blog RSS Feed
月光博客
月光博客
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
P
Privacy International News Feed
Know Your Adversary
Know Your Adversary
雷峰网
雷峰网

博客园 - 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----Library Functions 细细品味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----System Calls and Device Drivers
taizi · 2008-04-04 · via 博客园 - taizi

我们可以通过使用一小部分函数来访问和控制文件以及设备,这些函数,就是我们所共知的系统调用(system call),它是直接由Unix和Linux所提供的,是用来访问操作系统本身的接口。

操作系统的核心,也就是内核,其实就是一些设备驱动程序,它们是控制系统硬件的一堆低级接口。比如,有一个磁带设备的设备驱动,它所要达到的就是知道如何启动该磁带,向前卷还是向后卷,读操作还是写操作等等之类的。同时它还要知道磁带的写操作必须操作在一个确定的数据块尺寸内,这是因为磁带都是连续的,驱动程序不能直接访问磁带数据块,而必须卷动磁带到正确的位置。与此类似的,一个低级的硬盘设备驱动程序每次写操作都只能写入若干完整的磁盘扇区里面,而不能直接去访问所请求的磁盘数据块,这是因为磁盘是一个随机访问设备。

为了提供一个类似的接口,设备驱动程序将所有硬件所支持的特性都封装到内部,而一些比较特殊的硬件特性通常则通过使用ioctl(I/O control)系统调用来控制其是否有效。

位于/dev目录下的设备文件通常都如此使用:它们可以被打开、读取、写入以及关闭。例如,通过访问一个用户终端、打印机或者磁带设备来访问一个常规文件,使用的都是一样的open调用。

用来访问设备驱动的这些低级函数——系统调用,都包括:

  • open:打开一个文件或设备
  • read:从一个打开的文件或设备读取
  • write:写入到一个文件或设备
  • close:关闭文件或设备
  • ioctl:通过控制信息到一个设备驱动
  • ioctl系统调用被用来提供一些必需的硬件特定的控制(同常规的输入输出相反),因此它的使用根据设备的不同而不同。举例说明,一个到ioctl的调用可以被用来给一个磁带设备倒带,或者是用来设置一个串行端口的控制字符流。由于这个原因,ioctl不必从一台机器移植到另一台机器。另外,每一种设备都可以由自己来设置本身的ioctl命令。

    这些以及其他的系统调用通常都记录在手册的第二部分。原型所提供的参数列表以及函数将为系统调用返回相关的类型,以及与#defines相关联的内容,都被提供在include文件里。当然,每个系统各自所特有的系统调用也都将包含各自独特的调用种类。