(十八)VFS虚拟文件系统介绍、dup和dup2函数的介绍与使用
来源:互联网 发布:已婚网友见面目的知乎 编辑:程序博客网 时间:2024/06/06 04:17
Linux支持各种各样的文件系统格式,如ext2、ext3、reiserfs、FAT、NTFS、iso9660等等,不同的磁盘分区、光盘或其它存储设备都有不同的文件系统格式,然而这些文件系统都可以mount到某个目录下,使我们看到一个统一的目录树,各种文件系统上的目录和文件我们用ls命令看起来是一样的,读写操作用起来也都是一样的,这是怎么做到的呢?Linux内核在各种不同的文件系统格式之上做了一个抽象层,使得文件、目录、读写访问等概念成为抽象层的概念,因此各种文件系统看起来用起来都一样,这个抽象层称为虚拟文件系统(VFS,Virtual Filesystem)。下图介绍了运行时文件系统在内核中的表示:
在linux中提供了dup和dup2两个函数用于复制一个现存的文件描述符,使两个文件描述符指向同一个file结构体。如果两个文件描述符指向同一个file结构体,File Status Flag和读写位置只保存一份在file结构体中,并且file结构体的引用计数是2。如果两次open同一文件得到两个文件描述符,则每个描述符对应一个不同的file结构体,可以有不同的File Status Flag和读写位置。请注意区分这两种情况。
#include <unistd.h>int dup(int oldfd);int dup2(int oldfd, int newfd);
使用举例:
#include <unistd.h>#include <sys/stat.h>#include <fcntl.h>#include <stdio.h>#include <stdlib.h>#include <string.h>int main(void){ int fd, save_fd; char msg[] = "This is a test\n"; //打开一个somefile文件(以读写,创建方式打开)(设置权限位为:用户可读可写) fd = open("somefile", O_RDWR|O_CREAT, S_IRUSR|S_IWUSR); if(fd<0) { perror("open"); exit(1); } save_fd = dup(STDOUT_FILENO);//保存标准输出的文件描述符 dup2(fd, STDOUT_FILENO);//复制somefile的文件描述符并占用标准输出位 close(fd); //此时会将msg的内容输出到somefile文件中 //使用printf效果也是输出到somefile文件中 write(STDOUT_FILENO, msg, strlen(msg)); dup2(save_fd, STDOUT_FILENO);//将文件描述符改回来 write(STDOUT_FILENO, msg, strlen(msg));//输出到屏幕 close(save_fd); return 0;}
过程图解:
5 0
- (十八)VFS虚拟文件系统介绍、dup和dup2函数的介绍与使用
- dup() 和 dup2()函数的介绍
- 11Linux服务器编程之:VFS虚拟文件系统,dup()函数和dup2()函数
- 11Linux服务器编程之:VFS虚拟文件系统,dup()函数和dup2()函数
- dup与dup2函数介绍
- dup与dup2函数介绍
- dup和dup2函数介绍
- dup与dup2函数介绍----转载
- 文件系统的dup和dup2函数
- 虚拟文件系统-VFS介绍
- dup()以及dup2()函数介绍
- dup()以及dup2()函数介绍
- GlusterFS:虚拟文件系统(VFS)介绍
- Linux 虚拟文件系统(VFS)介绍
- GlusterFS:虚拟文件系统(VFS)介绍
- dup&dup2函数的使用
- dup、dup2介绍
- dup、dup2介绍
- CentOS7 Docker安装
- MAC设置HOST
- 每天一个 Linux 命令(16):which命令
- Java基础之IO流
- ionic1.3.1迄今为止遇到的bug
- (十八)VFS虚拟文件系统介绍、dup和dup2函数的介绍与使用
- 浅谈iOS中runtime
- Oracle 建立表空间和用户 \ 导出和导入 数据表
- Java应用一般架构
- 会场安排问题
- Partial Redundancy Elimination
- C语言基础(一)图形编程1
- Android控件构架与自定义控件详解(二)自定义View
- SDN之QoS--3:网络基础信息的测量(Floodlight)