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一样的设置
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