zoukankan      html  css  js  c++  java
  • Unix I/O总结

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

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

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

    1、打开文件:
    一个应用程序通过要求内核来打开文件,内核返回一个小的非负整数(描述符),内核记录有关这个文件的所有的信息,应用程序只需要记住这个描述符。

    #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 

    2、关闭文件

    #include <unistd.h> 
    int close(int fd);
    

    3、读文件

    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
    

    可靠的读

    ssize_t rio_readn(int fd, void *usrbuf, size_t n) {
    size_t nleft = n;
    ssize_t nread;
    char *bufp = usrbuf;
    while (nleft > 0) {
        if ((nread = read(fd, bufp, nleft)) < 0) {
    }
            if (errno == EINTR)
                nread = 0;
            else
                return -1;
        }
        else if (nread == 0)
            break;
        nleft -= nread;
        bufp += nread;
    }
    return (n - nleft);
    }
    

      

    :

      

     

      

    4、写文件

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

    可靠的写 :

    ssize_t rio_writen(int fd, void *usrbuf, size_t n)
        size_t nleft = n;
        ssize_t nwritten;
        char *bufp = usrbuf;
    while (nleft > 0) {
        if ((nwritten = write(fd, bufp, nleft)) <= 0) {
            if (errno == EINTR)  /* Interrupted by sig handler return */
                    nwritten = 0;
                else
    return -1;
            }
            nleft -= nwritten;
            bufp += nwritten;
    }
    return n; }
    

    5、标准I/O

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

    1)打开和关闭文件:fopen和fclose

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

    3)读写字符串:fgets和fputs

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

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

      

  • 相关阅读:
    PAT (Basic Level) Practice (中文)1002 写出这个数 (20 分)
    PAT (Advanced Level) Practice 1001 A+B Format (20 分)
    BP神经网络(原理及MATLAB实现)
    问题 1676: 算法2-8~2-11:链表的基本操作
    问题 1744: 畅通工程 (并查集)
    链表的基本操作(创建链表,查询元素,删除元素,插入元素等)
    问题 1690: 算法4-7:KMP算法中的模式串移动数组
    问题 1923: [蓝桥杯][算法提高VIP]学霸的迷宫 (BFS)
    Hdu1372 Knight Moves (BFS)
    Problem 2285 迷宫寻宝 (BFS)
  • 原文地址:https://www.cnblogs.com/shangdahao/p/3019461.html
Copyright © 2011-2022 走看看