10.5.3 Linux的输入/输出系统调用

Linux系统中的每个I/O设备都有一个特殊文件与其关联。大部分的I/O只使用合适的文件就可以完成,并不需要特殊的系统调用。然而,有时需要一些设备专用的处理。在POSIX之前,大部分UNIX系统有一个叫作ioctl的系统调用,它在特殊文件上执行大量设备专用的操作。数年之间,此系统调用已经变得非常混乱。POSIX对其进行了清理,把它的功能划分为主要面向终端设备的独立的功能调用。在Linux和现代UNIX系统中,每个功能调用是独立的系统调用,还是它们共享一个单独的系统调用或者其他的方式,都是依赖于实现的。

在图10-20中的前4个系统调用用来设置和获取终端速度。为输入和输出提供不同的系统调用是因为一些调制解调器工作速率不同。例如,旧的可视图文系统允许用户在家通过短请求以75位/s的上传速度访问服务器上的公共数据,而下载速度为1200位/s。这个标准在一段时间内被采用,因为对于家庭应用来说,输入输出时都采用1200位/秒则太昂贵了。网络世界中的时代已经改变了。不对称性仍然存在,一些电话公司提供8Mbps的入站服务和512kbps的出站服务,称为ADSL(非对称数字用户环线)。

阅读 ‧ 电子书库
图 10-20 管理终端的主要POSIX系统调用

列表中的最后两个系统调用主要用来设置和读回所有用来消除字符和行以及中断进程等功能的特殊字符。另外,它们可以使回显有效或无效,管理流控制及其他相关功能。还有一些I/O功能调用,但是它们都是专用的,所以这里就不进一步讨论了。此外,ioctl系统调用依然可用。

广告:个人专属 VPN,独立 IP,无限流量,多机房切换,还可以屏蔽广告和恶意软件,每月最低仅 5 美元