现在的位置: 首页 > 综合 > 正文

《嵌入式Linux应用程序开发详解》-6

2013年12月19日 ⁄ 综合 ⁄ 共 801字 ⁄ 字号 评论关闭

17、带缓冲和不带缓冲IO操作
 (1)read、write、open和close,为系统调用,符合POSIX规范,是不带缓冲IO操作
 (2)fread、fwrite、fopen和fclose,为库(glibc)函数调用,符合ANSI C规范,带缓冲IO操作
 (3)不带缓冲IO操作,在用户层没有缓存,但对于内核来说,还是进行了缓存,操作流程:数据---内核缓存区---磁盘文件
 (4)带缓存IO操作,在用户层有缓存,操作流程:数据---流缓存区---内核缓存区---磁盘
 (5)两者区别:不带缓存返回的是文件描述符,带缓存返回的是文件指针,是基于流缓存的;带缓存IO操作,亦称为标准IO,因为可以移植,而不带缓存IO操作是不可移植的;
    带缓存IO操作和不带缓存IO操作是调用与被调用的关系,前者调用后者;带缓存IO比不带缓存IO效率要高,因为其减少了系统调用的次数;
 (6)标准IO提供流缓存的目的是尽可能减少使用read和write调用的数量。标准IO提供了3种类型的缓存存储。全缓存:当填满标准IO缓存后才进行实际的IO操作;行缓存:当输入和输出中遇到新行符时,标准IO库执行IO操作;
 不带缓存:标准IO库不对字符进行缓存。
    
18、fcntl函数
fcntl是一个非常通用的函数,功能有待进一步的发掘。
(1) 复制一个现有的描述符(cmd=F_DUPFD).
(2) 获得/设置文件描述符标记(cmd=F_GETFD或F_SETFD).
(3) 获得/设置文件状态标记(cmd=F_GETFL或F_SETFL).可以设定的标志位O_NONBLOCK(将socket由阻塞变为非阻塞)、O_APPEND、O_DIRECT、O_ASYNC

(4) 获得/设置异步I/O所有权(cmd=F_GETOWN或F_SETOWN).
(5) 获得/设置记录锁(cmd=F_GETLK , F_SETLK或F_SETLKW).

抱歉!评论已关闭.