目录
1.Linux下什么可以被称之为文件
和平时我们在Windows下所看到的文件不同的是,Linux将所有可以input和output的设备都统称为文件。普通文件通过调用fopen/read之类的调用接口加载入进程内部(内存),然后再调用fwrite之类的接口写入另一个文件。前半部分可以当做input后半部分当做output。
2.了解open函数
int open(const char *pathname, int flags, mode_t mode);
pathname:文件名;
flags:打开方式:
O_RDONLY: 只读打开
O_WRONLY: 只写打开
O_RDWR : 读写打开
这三个常量,必须指定一个且只能指定一个
O_CREAT : 若文件不存在,则创建它。
O_APPEND: 追加写
使用多个方式时采用‘|’连结,例如 O_RDONLY|O_CREAT
mode:创建出文件的权限,例如:0666
返回值fd(马上解释)。
3.进程如何访问文件?文件描述符。
一个进程可以打开多个文件,那么OS必然需要管理非常多的文件。实际上OS定义了一个struct file来存储各个文件的属性信息和内容信息。
struct file会以一下形式存在:
struct file
{
struct file* prev;
struct file* next;
(各种信息)
}
那么OS将这么结构体串起来就可以很好的起到管理效果了。
再来谈谈进程是如何逐步获得struct file的:
a.首先进程通过查找task_struct中files*指针。b.找到files_struct,其中有file_array[]数组。c.而上面说的open返回的fd即是文件描述符。一般从3开始,因为0是stdin;1是stdout;2是stderr这些都默认打开的文件。fd就是file_arry[]数组的下标,通过不同下标进程可以找不同的文件,找到了文件自然可以访问它的file_struct。
本文含有隐藏内容,请 开通VIP 后查看