文件IO

作者: 枯海拾贝 | 来源:发表于2018-11-08 01:25 被阅读0次

    1.open/close

    • 函数原型:
      • int open(const char *pathname,int flags);
      • int open(const char *pathname,int flags,mode_t mode);
    • 参数:
      • flags
        • 必选项:O_RDONLY,O_WRONLY,O_RDWR

        • 可选项:

          • 创建文件:O_CREAT
            • 创建文件时检测文件是否存在:O_EXCL
            • 如果文件存在,返回-1
            • 必须与O_CREAT一起使用
          • 追加文件:O_APPEND
          • 文件截断:O_TRUNC
          • 设置非阻塞:O_NONBLOCK
      • mode
        • mode&~umask(通常0002)

    2.read

    • 函数原型:ssize_t read(int fd,void *buf,size_t count);
      • 参数:
        • fd:open的返回值
        • buf:缓冲区,存储要读取的数据
        • count:缓冲区能存储的最大字节数sizeof(buf)
      • 返回值:
        • -1:失败
        • 成功:
          • >0:读出的字节数
          • =0:文件已经读完了

    3.write

    • 函数原型:ssize_t write(int fd,const void *buf,size_t count);
      • 参数:
        • fd:open返回值
        • buf:要写到文件的数据
        • count:buf的有效字节数strlen(buf)
      • 返回值:
        • -1:失败
        • >0:写入到文件的字节数

    4.lseek

    • 函数原型:off_t lseek(int fd,off_t offset,int whence);
    • 使用:
    1. 文件指针移动到头部:lseek(fd,0,SEEK_SET)
    2. 获取文件指针当前位置:int len=lseek(fd,0,SEEK_CUR);
    3. 获取文件长度:int len=lseek(fd,0,SEEK_END);
    4. 文件扩展
      • 文件原大小100k,拓展为1100k:lseek(fd,1000,SEE_END)
      • 最后做一次写操作:write(fd,"a",1);

    5.阻塞和非阻塞

    • 阻塞和非阻塞是文件的属性还是read函数的属性?
      • 文件的属性
      • 普通文件:hello.c(默认不阻塞)
      • 终端设备:/dev/tty、管道、套接字(默认阻塞)

    6.stat

    1. 获取文件属性
    • int stat(const char *path,struct stat *buf);
    • int lstat(const char *path,struct stat *buf);
      • lstat读取的链接文件本身的属性
      • stat读取的是链接文件指向的文件的属性

    7.access

    测试当前用户指定文件是否具有某种属性

    • 当前用户:使用那个用户调用这个函数,这个函数就是当前用户
    • int access(const char *pathname,int mode)
      参数:
      • pathname:文件名
      • mode:4种权限
        R_OK--读,W_OK--写,X_OK--执行,F_OK--文件是否存在
        返回值:
      • 0:有某种权限,或者文件存在
      • 1:没有,或文件不存在

    8.chmod

    修改文件权限

    • int chmod(const char *filename,int mode)
      参数:
      • filename:文件名
      • mode:文件权限(八进制数)

    9.chmod

    修改文件所有者和所属组

    • int chown(const char *path,uid_t owner,gid_t group)
      参数:
      • path--文件路径
      • owner--整形值,用户ID(/etc/passwd)
      • group--组ID(/etc/group)

    10.truncate

    • int truncate(const char *path,off_t length);
      参数:
      • path--文件名
      • length--文件最终大小
        1. 比原来小,删掉后边的部分
        2. 比原来大,向后扩展

    11.目录操作相关函数


    12.目录遍历相关函数

    13.dup、dup2

    • int dup(int oldfd)
      • oldfd:要复制的文件描述符
      • 返回值:新的文件描述符
      • dup调用成功:有两个文件描述符指向同一个文件
      • 返回值:去最小的且没被占用的文件描述符
    • int dup2(int oldfd,int newfd)
      • 假设newfd已经指向了一个文件,首先断开close与那个文件的链接,newfd指向oldfd指向的文件
      • newfd没有被占用,newfd执行oldfd指向的文件

    14.fcntl:改变已经打开的文件属性

    相关文章

      网友评论

          本文标题:文件IO

          本文链接:https://www.haomeiwen.com/subject/eukztqtx.html