当前位置:嗨网首页>书籍在线阅读

44-结束语

  
选择背景色: 黄橙 洋红 淡粉 水蓝 草绿 白色 选择字体: 宋体 黑体 微软雅黑 楷体 选择字体大小: 恢复默认

2.12 结束语

本章讨论了Linux系统编程的基础:文件I/O。在Linux这样遵循一切皆文件的操作系统中,了解如何打开、读、写和关闭文件是非常重要的。所有这些操作都是传统的UNIX方式,很多标准都涵盖它们。

下一章将重点探讨缓冲I/O,以及标准C库的标准I/O接口。标准C库不仅仅是出于方便考虑,用户空间的缓冲I/O提供了关键的性能改进。

[1] 译注:快速用户空间互斥(fast userspace mutex,futex)是在linux上实现锁的基本对象。Futex的操作几乎全部在用户空间完成,可以避免锁竞争,执行效率非常高。参考http://en.wikipedia.org/wiki/Futex

[2] 对应的挂载选项是bsdgroups或sysvgroups。

[3] 前面提过,系统架构是基于体系结构定义的。因此,虽然x86-64有系统调用creat(),Alpha没有。当然,可以在任何体系结构上调用creat(),但是在某些体系结构上,creat()可能是个库函数,而不是系统调用。

[4] 还是需要提一下:硬盘可能会“撒谎”,通知内核缓冲区已经写到磁盘上了,而实际上它们还在磁盘的缓存中。

[5] 对于那些编写GUI应用的人来说,对于主循环(Mainloop)应该并不陌生——比如GNOME应用使用了其基础库GLib提供的一个主循环。主循环支持监控多个事件,并从单个阻塞点响应。

[6] 这是因为select()操作和poll()操作都是条件触发(level-triggered),而不是边缘触发(edge-triggered)(译者注:条件触发是指当条件满足时发生一个I/O事件,边缘触发是指当状态改变时发生一个I/O事件。我们将在第4章探讨的epoll()这两种模式都支持。边缘触发更简单,但是不注意的话很容易丢失I/O事件)。

[7] 如果位掩码是稀疏的,组成该掩码的每个值都可以用0来检测;只有当检测返回失败时,才需要对每个位进行检测。但是,如果掩码不是稀疏的,这项工作就很耗资源。

[8] 译注:trap语句是用于指定在接收到信号后要采取的操作。

[9] 译注:即如果某个存储单元被访问,它附近的存储单元很可能也会很快被访问。