• 系统级I/O


    Unix I/O

    输入操作是从I/O设备拷贝数据到主存,而输出操作是从主存拷贝数据到I/O设备。

    一个文件就是一个字节序列。

    所有的I/O设备,如网络、磁盘、和终端,都被模型化为文件,而所有的输入和输出都被当做想对应的文件的读写来执行。

    四个基本操作:

    打开文件

    改变当前的文件位置

    读写文件

    关闭文件

    打开和关闭文件

    打开文件

     
    #include <sys/types.h>
    #include <sys/stat.h>
    #include <fcntl.h>
    int open(char *filename, int flags, mode_t mode);//Returns: new file descriptor if OK, −1 on error

    flags 参数指明如何访问 :

     O_RDONLY: Reading only

     O_WRONLY: Writing only

     O_RDWR: Reading and writing 

    flag可以通过或一个掩码,为写提供额外的提示:

    O_CREAT:如文件不存在,建立一个空文件

    O_TRUNC:如存在,覆盖它

    O_APPEND:如存在,接着原文件之后添加

    mode参数指明新文件的访问权限:

    使用时需要用mode减去原umask

    关闭文件

    #include <unistd.h>

    int close(int fd);//Returns:0 if OK,-1 on error
     
     
     
     

    读和写文件

    读文件

    include <unistd.h>

    ssize_t read(int fd, void *buf, size_t n);//Returns: number of bytes read if OK, 0 on EOF, −1 on error
     
    写文件:
    #include <unistd.h>
    ssize_t write(int fd, const void *buf, size_t n);//Returns: number of bytes written if OK, −1 on error

    读取文件元数据

    stat和fstat函数

    #include<unistd.h>

    #include<sys/stat.h>

    int stat(const char *filename, struct stat *buf);//Returns:0 if OK,-1 on error

    int fstat(int fd, struct stat *buf);//Returns:0 if OK,-1 on error

    两者区别在与stat输入文件名,fstat输入文件描述符

    共享文件

    描述符表:每个进程一张独立的表

    文件表:所有进程共享,存放文件位置,引用计数和指向v-node表的指针

    v-node 表:所有进程共享,存放文件信息

    用同一个filename调用open函数两次会打开不同的文件表,而打开相同的v-node表

    示例:

    I/O重定向

    重定向函数

    #include<unistd.h>

    int dup2(int oldfd, int newfd);//Returns:descriptor if OK, −1 on error

    即将对后者的操作统统等同于对前者的操作

    标准I/O

    ANSI C定义了一组高级的输入输出函数,称为标准I/O库,为程序员提供了Unix I/O的较高级别的替代

    打开和关闭文件:fopen和fclose

    读和写字节的函数:fread和fwrite

    读写字符串:fgets和fputs

    复杂的格式的I/O:scanf和printf

    标准I/O库将一个打开的文件模型化为一个流,一个流就是一个指向FILE类型的结构的指针

    参考:http://www.cnblogs.com/shangdahao/archive/2013/04/14/3019461.html

  • 相关阅读:
    网站搜索功能lucene
    RabbitMQ消息队列
    zookeeper
    RPC+SOA+dubbo
    石英定时任务-quartz
    通用mapper、图片上传、nginx
    通用mapper和分类实现
    后台商品管理功能实现
    构建框架
    海量数据的并发处理
  • 原文地址:https://www.cnblogs.com/huyufeng/p/4947680.html
Copyright © 2020-2023  润新知