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

推荐订阅源

量子位
C
CXSECURITY Database RSS Feed - CXSecurity.com
S
Schneier on Security
博客园 - 叶小钗
博客园 - 三生石上(FineUI控件)
C
Cybersecurity and Infrastructure Security Agency CISA
Engineering at Meta
Engineering at Meta
Google DeepMind News
Google DeepMind News
酷 壳 – CoolShell
酷 壳 – CoolShell
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
H
Hackread – Cybersecurity News, Data Breaches, AI and More
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
博客园_首页
T
Threat Research - Cisco Blogs
C
Cisco Blogs
Recent Announcements
Recent Announcements
S
Securelist
N
Netflix TechBlog - Medium
The Register - Security
The Register - Security
P
Privacy & Cybersecurity Law Blog
宝玉的分享
宝玉的分享
D
Darknet – Hacking Tools, Hacker News & Cyber Security
L
LINUX DO - 热门话题
T
Tor Project blog
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
月光博客
月光博客
AWS News Blog
AWS News Blog
P
Proofpoint News Feed
博客园 - 司徒正美
L
LINUX DO - 最新话题
Stack Overflow Blog
Stack Overflow Blog
博客园 - 聂微东
H
Help Net Security
Spread Privacy
Spread Privacy
PCI Perspectives
PCI Perspectives
Project Zero
Project Zero
I
Intezer
T
The Blog of Author Tim Ferriss
有赞技术团队
有赞技术团队
The Last Watchdog
The Last Watchdog
C
Check Point Blog
Blog — PlanetScale
Blog — PlanetScale
B
Blog RSS Feed
MyScale Blog
MyScale Blog
V
Vulnerabilities – Threatpost
Recorded Future
Recorded Future
T
Tenable Blog
Jina AI
Jina AI
D
DataBreaches.Net
阮一峰的网络日志
阮一峰的网络日志

博客园 - 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文件里。当然,每个系统各自所特有的系统调用也都将包含各自独特的调用种类。