第26课-库函数方式文件编程幻灯片.ppt

  1. 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
2.多路复用-select 图解: 为什么我们需要select? 多路复用-select函数 函数原型: int select(int maxfd, fd_set *readfds, fd_set *writefds, fe_set *exceptfds, const struct timeval *timeout) 函数作用: 同时监控多个文件,如果有一个文件满足要求,函数返回。当没有文件满足要求的时候,函数可能阻塞。 所属头文件: unistd.h 返回值: 成功时返回满足要求的文件个数,出错时返回-1. 多路复用-select函数 函数参数: -maxfd: 要监控的最大的文件描述符+1 -readfds: 要进行读监控的文件集合 -writefds :要进行写监控的文件集合 -exceptfds:要进行异常监控的文件集合 -timeout:阻塞时间 1. NULL:一直阻塞 2. 0:不阻塞,立即返回 3. 特定的时间值:当没有文件满足要求时,阻塞的时间 多路复用-select函数 Linux系统提供了一系列宏来帮助我们操作文件集合: FD_ZERO(fd_set *fdset) 清空文件集合fdset FD_SET(int fd, fd_set *fdset) 将fd所指代的文件加入文件集合fdset FD_CLR(int fd, fd_set *fdset) 将fd所指代的文件从文件集合fdset中去除 FD_ISSET(int fd, fd_set *fdset) 判断fd所指的文件是否在文件集合fdset中。在调用select后,不满足要求的文件将会被select函数从文件集合中清除掉,仍然留在文件集合中的文件将是满足要求的文件,因此使用FD_ISSET来检测文件是否还在集合中来判断文件是否满足要求。 手把手教你写代码 同时监控多个文件 3.文件映射-mmap 文件映射-mmap函数 函数原型: void* mmap ( void * addr , size_t len , int prot , int flags , int fd , off_t offset ) 函数作用: 负责把文件内容映射到进程的虚拟内存空间, 通过对这段内存的读取和修改,来实现对文件的读取和修改,而不需要再调用read,write等操作。 所属头文件: unistd.h 返回值: 成功时返回映射的地址。 文件映射-mmap函数 函数参数: -addr:指定映射的起始地址, 通常设为NULL, 由系统指定 -length: 映射到内存的文件长度。 -prot: 映射区的保护方式, 可以是: PROT_EXEC: 映射区可被执行 PROT_READ: 映射区可被读取 PROT_WRITE: 映射区可被写入 文件映射-mmap函数 函数参数: -flags: 映射区的特性, 可以是: MAP_SHARED: 写入映射区的数据会复制回文件。 MAP_PRIVATE: 对映射区的写入操作不会写回原文件。 -fd: 文件描述符, 代表要映射文件。 -offset: 从offset处开始取文件内容来映射,通常为0, 表示从文件头开始映射。 文件映射-munmap函数 函数原型: int munmap(void *start,size_t length) 函数作用: 解除文件映射 所属头文件: unistd.h 返回值: 成功时返回0;失败时返回-1. 文件映射-munmap函数 函数参数: -start: 取消映射的地址 -length: 取消映射的长度 手把手教你写代码 文件映射 4.文件锁 图解: 为什么我们需要 文件锁 文件锁-分类 排他锁:如果事务T对文件A加上该锁后,则其他事务不能再对A加任任何类型的锁,直到在事务的末尾将资源上的锁释放为止。获取排他锁的事务既能读数据,又能修改数据。 共享锁:如果事务T对数据A加上该锁后,则其他事务只能对A再加共享锁,不能加排他锁,直到已释放所有共享锁。获准共享锁的事务只能读数据,不能修改数据。 文件锁-实现 Linux有两种方法可以实现文件锁:使用 fcntl系统调用与使用lockf调用。我们会主 要介绍fcntl接口,因为这是最经常用到的 接口。 文件锁-fcntl 函数原型: int fcntl (int fd, int cmd, struct flock *lock); 函数作用: 对文件锁进行操作 所属头文件: fcntl.h 文件锁-fcnt

您可能关注的文档

文档评论(0)

a13355589 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档