open函数
open()
//头文件
#include<sys/types.h>
#include<sys/stat.h>
#include<fcntl.h>
//功能
打开或创建文件(建立一个文件描述符,其他的函数可以通过文件描述符对指定文件
进行读取和写入的操作)
//原型
int open(const char*pathname,int flags);
int open(const char*pathname,int flags,mode_t mode);
参数说明:
1.pathname
要打开或创建的目标文件
2.flags
打开文件时,可以传入多个参数选项,用下面的一个或者多个常量进行“或”运算,
构成falgs参数:
O_RDONLY: 只读打开
O_WRONLY: 只写打开
O_RDWR: 读,写打开
以上三个参数必须指定一个。
O_CREAT: 若文件不存在,则创建它,需要使用mode选项。来指明新文件的访问
权限
O_APPEND: 追加写,如果文件已经有内容,这次打开文件所写的数据附加到文件
的末尾而不覆盖原来的内容
//返回值
成功:新打开的文件描述符
失败:-1
open返回的文件描述符一定是最小的而且没有被使用的
打开的文件描述符一定要记得关闭,否则资源会被大量的占用,关闭文件描述符用close()函数
0&1&2
linux进程默认情况下会打开三个文件描述符,分别是标准输入0,标准输出1,标准错误2。0,1,2分别对应的物理设备是键盘,显示器,显示器。
文件描述符
1 #include<stdio.h>
2 #include<sys/types.h>
3 #include<sys/stat.h>
4 #include<fcntl.h>
5
6 int main()
7 {
8 //close(0);
9 int fd = open("myfile", O_RDONLY);
10 if(fd<0)
11 {
12 perror("open");
13 return 1;
14 }
15 printf("fd:%d\n",fd);
16 close("fd");
17 return 0;
18 }
如果在open()之前,close(0)。
文件描述符的本质是数组下标,文件是数据,在打开文件时,操作系统就要将文件管理起来,操作系统要创建一个相应的数据结构来描述目标文件,file结构体,表示这个打开的文件。每个进程task_struct都有一个*file的指针指向一张表file_struct,这张表是一个指针数组,每一个元素是指向打开对应文件的指针。