I/O

同步,异步 ,阻塞,非阻塞
 消息的等待方式
  阻塞:如果数据没有准备好,就一直等待;反之,立即返回没有数据
 消息的通知方式
  同步:什么都不做,等待被调用做完后,返回。
  异步:根据调用对象的机制,调用者通过状态,通知,回调得到调用的结果    // select, epoll
   状态:调用者定时检查
   通知,回调:调用者被动得到
   
   同步阻塞
   轮询(同步非阻塞).

 

文件I/O     
            fcntl
函数可以改变已经打开文件的性质。  
                      F_SETFD 设置文件描述符标志,现在只有F_CLOEXEC
                      F_SETFL 设置文件状态,O_SYNC 同步写,即马上写到磁盘上,会增加系统时间;
                      用O_ACCMODE与 来取得文件状态
                      F_SETOWN 设置接收SIGIO的进程或者进程组 
           ioctl
                      盘标号DIO,文件FIO,磁带MTIO,套接SIO,终端TIO 

高级I/O
  非阻塞IO
           如果是调用open以获得该描述符,则可指定O_NONBLOCK标志
                   对于已经打开的一个描述符,则可调用f c n t l打开O N O N B L O C K文件状态标志
           若使用阻塞IO,则有可能另一IO得不到处理。
           若使用轮询非阻塞IO,轮询浪费时间,也不知道等多久
  记录锁
            记录锁(record locking)的功能是:一个进程正在读或修改文件的某个部分时,可以阻止其他进程修改同一文件区。
                    fcntl(, F_SETLKW, );
                    struck flock // 锁的类型,锁定范围
                    F_GETLK  测试所描述的锁是否被另一个进程阻塞(排斥),是,返回另一个进程的锁信息;否,返回,无锁。
                    F_SETLKW  若想建立的锁被阻塞,则等待,直到收到信号
            锁的释放
                    进程结束,文件被进程关闭时只释放该进程的锁?
                           fork的子进程不继承父进程的锁
                          exec可以继承原来的锁
             建议性锁和强制性锁
 流       
    用I / O多路转接(I/O multiplexing)。其基本思想是:先构造一张有关描述符的表,然后调用一个函数,
   它要到这些描述符中的一个已准备好进行I / O时才返回。在返回时,它告诉进程哪一个描述符已准备好可以进行I / O。
  
   select
    int select(关心的最大描述符+1,读,写,异常,等待时间)
              在等待的时间内有准备好的,立即返回;若捕捉到信号,EINTR返回-1;否则超时,返回0
              关心条件3个都为空时,select可做比sleep更精确的时钟
    fd_set rset;
    int fd;
    FD_ZERO(&rset);
    FD_SET(fd, &rset);
    if(FD_ISSET(fd, &rset))
    如果在一个描述符上碰到了文件结束,则s e l e c t认为该描述符是可读的。然后调用r e a d,它返回0,
    
  int poll(数组,数组个数,时间) ;
   struct pollfd // 描述符,关心的事件,发生的事件   
 
 异步I / O(asynchronous I/O)。其基本思想是进程告诉内核,当一个描述符已准备好可以进行I / O时,用一个信号通知它。
 
 readv and writev
  readv(描述符,数组,个数)  // 即读到数组指定的多个缓存中
   struct iovec // 缓存开始的地址,长度
   散布读,聚集写  
 readn and writen
  网络,终端读写时,可能读的量少于要求读的个数。(磁盘读写没有这个问题)
   多次调用读或者写,满足读写N个字符的要求

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值