11Linux服务器编程之:VFS虚拟文件系统,dup()函数和dup2()函数
1dup函数和dup2函数
#include<unistd.h>
int dup(intoldfd);
int dup2(intoldfd, int newfd);
dup和dup2都可用来复制一个现存的文件描述符,使两个文件描述符指向同一个file结构体。如果两个文件描述符指向同一个file结构体,File Status Flag和读写位置只保存一份在file结构体中,并且file结构体的引用计数是2。如果两次open同一文件得到两个文件描述符,则每个描述符对应一个不同的file结构体,可以有不同的File Status Flag和读写位置。请注意区分这两种情况。
#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";
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);
close(fd);
write(STDOUT_FILENO,msg, strlen(msg));
dup2(save_fd,STDOUT_FILENO);
write(STDOUT_FILENO,msg, strlen(msg));
close(save_fd);
return 0;
}
2VFS虚拟文件系统
关于函数调用的实质
总结:
A:操作磁盘上的文件,都要经过驱动。
B:只要两个文件描述符指向的是同一个文件结构体,那么操作文件的时候就相当于在在文件后追加的过程,不会覆盖文件内容。如果同时用open打开两个文件,并且放回的两个文件描述符之间没有关联,那么这时候操作的时候一个写操作为覆盖另外一个写操作。
11Linux服务器编程之:VFS虚拟文件系统,dup()函数和dup2()函数相关推荐
- Linux(一) VFS虚拟文件系统
一.先了解一下什么是挂载 Linux有自己的一套文件系统,例如Ext2.Ext3,但是外部其他文件系统时,由于各个文件系统都各自有一套的文件管理体系,是无法通过Linux本身访问文件的方式直接访问的, ...
- Linux 字符设备驱动开发基础(六)—— VFS 虚拟文件系统解析
一.VFS 虚拟文件系统基础概念 Linux 允许众多不同的文件系统共存,并支持跨文件系统的文件操作,这是因为有虚拟文件系统的存在.虚拟文件系统,即VFS(Virtual File System)是 ...
- linux读取文件修改时间函数,Linux服务器编程之utime()函数修改文件存取时间
Linux服务器编程之utime()函数修改文件存取时间 C语言utime()函数:修改文件的存取时间和更改时间 头文件: #include #include 定义函数: int utime(cons ...
- VFS - 虚拟文件系统的加载和导出
VFS - 代码生成器预览功能实现 VFS - 虚拟文件系统基本操作方法的封装 VFS - 虚拟文件系统的加载和导出 这是 VFS 的最后一篇,前面两篇中的基本方法已经实现了一个简单的虚拟文件系统,可 ...
- VFS - 虚拟文件系统基本操作方法的封装
VFS - 代码生成器预览功能实现 VFS - 虚拟文件系统基本操作方法的封装 VFS - 虚拟文件系统的加载和导出 接前一篇 VFS - 代码生成器预览功能实现 ,上一篇讲到了 mkdirs 封装创 ...
- Windows编程之CreateEvent,WaitForSingleObject,SetEvent,ResetEvent函数
一 Windows编程之CreateEvent,WaitForSingleObject,SetEvent,ResetEvent函数 1 CreateEvent HANDLE WINAPI Create ...
- dup函数和dup2函数
dup函数和dup2函数 有时我们希望把标准输入重定向到一个文件,或者把标准输出重定向到一个网络连接.这可以通过我们要介绍的用于复制文件描述符的dup和dup2函数来实现: #include < ...
- Linux·VFS虚拟文件系统
目录 1 概念 2 架构 3 接口适配示例 4 跨设备/文件系统示例 5 VFS的抽象接口 6 Linux系统VFS支持的文件系统 7 统一文件模型(common file model) 7.1 Su ...
- 【文件系统】VFS虚拟文件系统
1.VFS Linux支持各种各样的文件系统格式,比如说ext2,ext3,reiserfs,FAT,NTFS,iso9660等, 不同的磁盘分区,光盘或者其他存储设备都有不同的文件系统格式,然后这些 ...
最新文章
- 浅谈微信小程序生命周期
- VS2010中 C++创建DLL图解
- c++设计新思维_贵阳花溪区初三冲刺多少钱,新思维
- 【Elasticsearch】es 脑裂
- Windows 8及以上系统安装好SQL Server 2008之后找不到SQL Server配置管理器的问题
- 用 Go 构建一个区块链 -- Part 1: 基本原型
- Caused by: java.lang.IllegalArgumentException: Result Maps collection does not contain value for...
- grub4dos 制作WIN7、WINPE2003、Ubuntu、dos工具箱多启动U盘 (不量产)
- 熊迈摄像头SDK二次开发:登录、截屏、录像等功能
- 华为手机相册怎么镜像翻转_手机相册里的照片误删怎么恢复?简单操作就搞定...
- AutoCAD2011,2020安装教程
- java开发实战小参考常见问题及处理
- 前端微信签名验证工具_微信支付服务商签名验证无误,但是统一下单后服务器返回【签名错误】...
- linux登陆操作mysql
- 蓝桥杯刷题日记 更新到2022/2/5
- PostgreSQL 多维空间几何对象 相交、包含 高效率检索实践 - cube
- asp.net项目源码C#中学生健康档案管理系统VS开发sqlserver数据库web结构编程
- FFMPEG编译裁剪移植
- LARAVEL 消息模板推送
- 用代码批量打开Excel表格中的网址链接
热门文章
- boost::spirit模块实现附加语义动作的各种方法的测试程序
- boost::proto模块实现使用一个带有语法的域来修剪集合重载运算符的测试程序
- boost::mpl::string相关的测试程序
- boost::mp11::mp_transform_third相关用法的测试程序
- boost::mp11::mp_flatten相关用法的测试程序
- boost::hana::experimental::print用法的测试程序
- boost::geometry::num_geometries用法的测试程序
- boost::filesystem模块实现打印window属性的测试程序
- GDCM:gdcm::Filename的测试程序
- boost::iterator的用法测试实例