zoukankan      html  css  js  c++  java
  • 文件I/O

    lseek

    每个打开的文件都由一个“当前文件偏移量”,是一个非负整数,用以度量从文件开始处计算的字节数。通常,读写操作都是从当前文件偏移量处开始,并使偏移量增加所读或写的字节数。默认情况下,你打开开一个文件(open),除非指定O_APPEND参数,不然位移量被设为0.

    select

    之前的read函数可以监控一个文件描述符(eg:键盘)是否有输入,当键盘没有输入,read将会阻塞,直到用户从键盘输入为止。用相同的方法可以监控鼠标是否有输入。但想同时监控鼠标和键盘师傅有输入,这个方法就行不通了。 /dev/input/mice 是鼠标的设备文件 fd = open("/dev/input/mice", O_RDONLY); read(0, buf, 100); read(fd, buf, 100); 在上面的程序中,当read键盘的时候,若无键盘输入则阻塞在第2行,此时即使鼠标有输入,程序也没有机会执行第3行获得鼠标的输入。这种情况就需要select同时监控多个文件描述符。 需要包含的头文件:`` 函数原型:

    int select(int maxfd, fd_set * readset, fd_set * writeset, fd_set * exceptset, const struct timeval * timeout)
    返回值:失败返回-1,成功返回readset,writeset,exceptset中所有,有指定变化的文件描述符的数目(若超时返回0)

    参数: maxfd:要检测的描述符个数, 因此值应为最大描述符+1 readset:被监控是否有输入的文件描述符集。不监控时,设为NULL writeset:被监控是否可以输入的文件描述符集。不监控时,设为NULL exceptset:被监控是否有错误产生的文件描述符集。不监控时,设为NULL timeval:监控超时时间。设置为NULL表示一直阻塞到有文件描述符被监控到有指定变化。

    Tips:

    readset,writeset,exceptset这三个描述符集指针均是值—结果参数,调用的时候,被监控描述符相应位需要置1;返回时,未就绪的描数字相应位会被清0,而就绪的会被置1。 下面的系统定义的宏,和select配套使用 FD_ZERO(&rset):将文件描述符集rset的所有位清0 FD_SET(4, &reset):设置文件描述符集rset的bit 4 FD_CLR(fileno(stdin), &rset):将文件描述符集rset的bit 0清0 FD_ISSET(socketfd, &rset):若文件描述符集rset中的socketfd位置1
  • 相关阅读:
    ASIHTTPREQUEST 文档
    本地通知
    ASIHttpRequest 使用过程中,中文编码的问题
    讲讲最近自己的学习,谈谈未来的想法
    关于 ASP.NET MVC 4 如果管理用户
    [转贴]超级懒汉编写的基于.NET的微信SDK
    [转贴]实践:C++平台迁移以及如何用C#做C++包装层
    [转贴]Linq之动态查询
    [转贴]watin的一些例子
    [转贴]xcode帮助文档
  • 原文地址:https://www.cnblogs.com/loveyan/p/4641059.html
Copyright © 2011-2022 走看看