• 第33天-文件I/O _2(2013.09.03)


      1.阻塞分为: 完全阻塞, 不阻塞, 延时阻塞

      2.管理操作系统的方式: 1. 轮询,2. 中断

      3./dev/tty : 当前终端

      5.harddisk 使用block来管理

         memory  使用page来管理

      6.如果在open一个设备时指定了O_NONBLOCK标志, read/write就不会阻塞,以read为例, 如果设备没有数据到达就返回-1, 同时置errno为EWOULDBLOCK(或者EAGAIN)

      7.fcntl : (对设备寄存器进行读写)   可以使用fcntl函数改变一个已打开的文件的属性, 可以重新设置读, 写, 追加, 非阻塞等标志,而不必重新open文件

          原型 : int fcntl(int  fd, int cmd);

              int fcntl(int fd, int cmd, long arg);

              int fcntl(int fd, int cmd, struct flock *lock);

           作用 : 获取标志, 返回标志, 

              设置标志

              文件加锁

          除了F_GETFL和F_SETFL命令外, 还可以设置文件记录锁,。可以通过fcntl设置都是当前进程如何访问设备或文件的访问控制属性

          扩展 : 只有 0_APPEND, O_NONBLOCK 可以被改变

      8.对于重定向符,,小于默认为 0, 大于 默认为 1, >>  ; 无默认参数

      9(重要). command > /dev/NULL 2 > &1

             2 和 1 同时指向某一个文件, 去除警告。。

      10. ioctl : 用于向设备发控制和配置命令, 

            read/write读写的数据是in-band数据, 是I/O操作的主体,

            ioctl命令传送的是控制信息, 其中的数据是辅助的数据  是Out-of-band数据

          原型 : int ioctl(int d, int request, ...);

              d 是某个设备的文件描述符, request 是ioctl 的命令

      11.memory mapping   映射

          Memory Managemete Unit    物理地址   -- 格式化-- 虚拟地址 -- --进程空间地址

          malloc   mmap2

          mmap    mmap2

      12.mmap : 可以把磁盘文件的一部分直接映射到内存,这样文件中的位置直接就有对应的内存地址,  对文件的读写可以直接来做而不需要read/write函数

          函数原型 : void *mmap(void *addr, size_t len, int prot, int flag, int filedes, off_t off);

                int munmap(void *addr, size_t len);

          addr : 表示从什么地方映射,一般为 NULL

          len : 映射的长度

          prot : 

            参数有四种取值 : 

                    PROT_EXEC : 表示映射的这一段可执行,例如 :映射共享库

                    PROT_READ :表示映射的这一段可读

                    PROT_WRITE :  表示映射的这一段可写

                    PROT_NONE : 表示映射的这一段不可访问

          flag 参数 :

                MAP_SHARED :多个进程对同一个文件的映射是共享的,一个进程对映射的内存做了修改,另一个进程也会看到变化

                MAP_PRIVATE :多个进程对同一个文件的映射不是共享的,一个进程对映射的内存做了修改,另一个进程并不会看到这中变化,也不会真的写到文件中去

          英语: block (块)  page(叶)  status(状态)

  • 相关阅读:
    UE4 WCF RestFul 服务器 读取JSON 数据并解析 简单实例
    Android aidl Binder框架浅析
    AIDL
    android 五种存储方式
    Android进程间通信机制
    Service全面总结
    Android平台中关于音频播放
    Android广播机制
    Cursor,CursorAdapter中的观察者模式解析
    ContentProvider和Uri详解
  • 原文地址:https://www.cnblogs.com/cxw825873709/p/3299269.html
Copyright © 2020-2023  润新知