zoukankan      html  css  js  c++  java
  • 系统级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

  • 相关阅读:
    www.insidesql.org
    kevinekline----------------- SQLSERVER MVP
    Sys.dm_os_wait_stats Sys.dm_performance_counters
    如何使用 DBCC MEMORYSTATUS 命令来监视 SQL Server 2005 中的内存使用情况
    VITAM POST MORTEM – ANALYZING DEADLOCKED SCHEDULERS MINI DUMP FROM SQL SERVER
    Cargo, Rust’s Package Manager
    建筑识图入门(初学者 入门)
    Tracing SQL Queries in Real Time for MySQL Databases using WinDbg and Basic Assembler Knowledge
    Microsoft SQL Server R Services
    The Rambling DBA: Jonathan Kehayias
  • 原文地址:https://www.cnblogs.com/huyufeng/p/4947680.html
Copyright © 2011-2022 走看看