文件IO

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)