Skip to content

Latest commit

 

History

History
59 lines (43 loc) · 1.64 KB

10.2.md

File metadata and controls

59 lines (43 loc) · 1.64 KB

10.2 打开和关闭文件

open函数

int open(const char *pathname, int flags, mode_t mode);  

open函数传入文件名称和路径,返回一个文件描述符
注意:返回的文件描述符总是在进程中当前没有打开的最小描述符

flags:

  • O_RDONLY 只读
  • O_WRONLY 只写
  • O_RDWR 可读可写

可以或的选项:

  • O_CREATE 文件不存在则创建一个空文件
  • O_TRUNC 如果文件存在就截断它
  • O_APPEND 附加 每次写操作之前,文件位置移动到文件的结尾

mode:

  • S_IRUSER S_IWUSER S_IXUSER 拥有者可读,可写,可执行
  • S_IRGRP S_IWGRP S_IXGRP 组成员可读,可写,可执行
  • S_IROTH S_IWOTH S_IXOTH 任何人可续,可写,可执行

mode是指定新文件的访问权限位,和umask一样的设置

close函数

 int close(int fd);

关闭一个打开的文件,回收文件描述符,重复关闭会出错

练习题:

      1 #include <stdio.h>
      2 #include <unistd.h>
      3 #include <fcntl.h>
      4
      5 int main()
      6 {
      7         int fd1,fd2;
      8
      9         fd1 = open("foo.txt",O_RDONLY,0);
     10         printf("fd1=%d\n",fd1);
     11         close(fd1);
     12
     13         fd2 = open("baz.txt",O_RDONLY,0);
     14         printf("fd2=%d\n",fd2);
     15
     16         return 0;
     17 }

结果:

    [chapter10] ./10_1         
    fd1=3  //foo.txt已经关闭,描述符释放后,baz.txt可以使用 open返回最小可用的描述符
    fd2=3  //注意:标准输入,标准输出和标准错误为0,1,2