zoukankan      html  css  js  c++  java
  • 文件I/O

    1、文件I/O——介绍
    posix(可移植操作系统接口)定义的一组函数;
    不提供缓冲机制,每次读写操作都引起系统调用;
    核心概念是文件描述符;
    Linux下, 标准I/O基于文件I/O实现。
    2、文件I/O——文件描述符
    每个打开的文件都对应一个文件描述符
    文件描述符是一个非负整数。Linux为程序中每个打开的
    文件分配一个文件描述符
    文件描述符从0开始分配,依次递增。
    文件IO操作通过文件描述符来完成
    0, 1, 2 的含义:标准输入、标准输出、标准错误
    3、文件I/O——open
    open函数用来创建或打开一个文件:
    #include <fcntl.h>
    int open(const char *path, int oflag, …);
    成功时返回文件描述符;出错时返回EOF。
    打开文件时使用两个参数;
    创建文件时第三个参数指定新文件的权限;
    只能打开设备文件。
    原型int open(const char *pathname, int flags, mode_t mode);
    参数:
        pathname    被打开的文件名(可包括路径名)。
        flags
                 O_RDONLY:只读方式打开文件。
                O_WRONLY:可写方式打开文件。这三个参数互斥
                O_RDWR:读写方式打开文件。
                O_CREAT:如果该文件不存在,就创建一个新的文件,并用第三的参数为其设置权限。
                O_EXCL:如果使用O_CREAT时文件存在,则可返回错误消息。这一参数可测试文件是否存在。
                O_NOCTTY:使用本参数时,如文件为终端,那么终端不可以作为调用open()系统调用的那个进程的控制终端。
                O_TRUNC:如文件已经存在,那么打开文件时先删除文件中原有数据。
                O_APPEND:以添加方式打开文件,所以对文件的写操作都在文件的末尾进行。
        mode        被打开文件的存取权限,为8进制表示法。
    4、文件I/O——close
    close函数用来关闭一个打开的文件:
    #include <unistd.h>
    int close(int fd);
    成功时返回0;出错时返回EOF
    程序结束时自动关闭所有打开的文件
    文件关闭后,文件描述符不再代表文件
    5、文件I/O——read
    read函数用来从文件中读取数据:
    #include <unistd.h>
    ssize_t read(int fd, void *buf, size_t count);
    成功时返回实际读取的字节数;出错时返回EOF
    读到文件末尾时返回0
    buf是接收数据的缓冲区
    count不应超过buf大小
    6、文件I/O——write
    write函数用来向文件写入数据:
    #include <unistd.h>
    ssize_t write(int fd, void *buf, size_t count);
    成功时返回实际写入的字节数;出错时返回EOF
    buf是发送数据的缓冲区
    count不应超过buf大小
    7、文件IO——lseek
    lseek函数用来定位文件:
    #include <unistd.h>
    off_t lseek(int fd, off_t offset, intt whence);
    成功时返回当前的文件读写位置;出错时返回EOF
    参数offset和参数whence同fseek完全一样
    8、访问目录——opendir
    opendir函数用来打开一个目录文件:
    #include <dirent.h>
    DIR *opendir(const char *name);
    DIR是用来描述一个打开的目录文件的结构体类型
    成功时返回目录流指针;出错时返回NULL
    9、访问目录——readdir
    readdir函数用来读取目录流中的内容:
    #include <dirent.h>
    struct dirent *readdir(DIR *dirp);
    struct dirent是用来描述目录流中一个目录项的结构体类型
    包含成员char d_name[256]
    成功时返回目录流dirp中下一个目录项;出错或到末尾时时返回NULL
    10、访问目录——closedir
    closedir函数用来关闭一个目录文件:
    #include <dirent.h>
    int closedir(DIR *dirp);
    成功时返回0;出错时返回EOF
    11、修改文件访问权限——chmod/fchmod
    chmod/fchmod函数用来修改文件的访问权限:
    #include <sys/stat.h>
    int chmod(const char *path, mode_t mode);
    int fchmod(int fd, mode_t mode);
    成功时返回0;出错时返回EOF
    root和文件所有者能修改文件的访问权限
    12、获取文件属性——stat/lstat/fstat
    stat/lstat/fstat函数用来获取文件属性:
    #include <sys/stat.h>
    int stat(const char *path, struct stat *buf);
    int lstat(const char *path, struct stat *buf);
    int fstat(int fd, struct stat *buf);
    成功时返回0;出错时返回EOF
    如果path是符号链接stat获取的是目标文件的属性;而lstat获取的是链接文件的属性
    13、文件属性——struct stat
    struct stat是存放文件属性的结构体类型:
    mode_t st_mode        类型和访问权限
    uid_t st_uid               所有者id
    uid_t st_gid               用户组id
    off_t st_size              文件大小
    time_t st_mtime        最后修改时间
    14、文件类型——st_mode
    通过系统提供的宏来判断文件类型:st_mode & 0170000
    S_ISREG(st_mode)     0100000
    S_ISDIR(st_mode)      0040000
    S_ISCHR(st_mode)     0020000
    S_ISBLK(st_mode)      0060000
    S_ISFIFO(st_mode)     0010000
    S_ISLNK(st_mode)      0120000
    S_ISSOCK(st_mode)    0140000
    15、文件访问权限——st_mode
    通过系统提供的宏来获取文件访问权限:
    S_IRUSR     00400    bit:8
    S_IWUSR    00200         7
    S_IXUSR     00100         6
    S_IRGRP     00040         5
    S_IWGRP    00020         4
    S_IXGRP     00010         3
    S_IROTH     00004         2
    S_IWOTH    00002         1
    S_IXOTH     00001         0

  • 相关阅读:
    从jQuery看JavaScript匿名函数与闭包
    向properties文件中写入信息(针对获取properties文件失败的总结)
    windows系统下的redis启动教程
    第零次作业
    C语言博客作业02循环结构
    c语言博客作业03函数
    第一次作业
    笔记
    整型类型
    鸡和兔
  • 原文地址:https://www.cnblogs.com/sanwumanzi/p/10594119.html
Copyright © 2011-2022 走看看