高级I/O

来源:互联网 发布:库里数据统计 编辑:程序博客网 时间:2024/04/29 04:02

14.2非阻塞I/O

非阻塞I/O使我们可以调用open,read和write这样的I/O操作,并使这些操作不会永远阻塞。如果这种操作不能完成,则调用立即出错返回,表示该操作如继续执行将阻塞。

指定为非阻塞I/O

1)open描述符,指定O_NOBLOCK

2)已经打开的描述符,调用fcntl,打开O_NOBLOCK状态标志。

----------------------------------------------------------

14.3记录锁

当一个进程正在读或修改文件的某个部分时,它可以阻止其他进程修改同一文件区。

#include<fcntl.h>

int fcntl(int filedes, int cmd,...)

对于记录锁,cmd是F_GETLK,F-SETLK,F_SETLKW,第三个参数是一个指向flock结构的指针。

多个进程在一个特定的字节上可以有一把共享的读锁,但是在一个给定字节上只能有一个进程独用的一把写锁。如果一个进程对一个文件区间已经有了一把锁,后来该进程又企图在同一文件区间再加一把锁,那么新锁将替换老锁。

建议性锁和强制性锁?

----------------------------------------------------------------------

14.4STREAMS

流在用户进程和设备驱动程序之间提供了一条全双工通路。流无需和实际硬件设备直接会话,流也可以用来构造伪设备驱动程序。

在流首之下可以压入处理模块。

STREAMS消息

STREAMS的所有输入和输出都基于消息。流首和用户进程使用read,write,ioctl,getmsg,getpmsg,putmsg,putpmsg交换消息。

消息由下列几部分组成:消息类型,可选择的控制信息以及可选择的数据。