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()函数相关推荐

  1. Linux(一) VFS虚拟文件系统

    一.先了解一下什么是挂载 Linux有自己的一套文件系统,例如Ext2.Ext3,但是外部其他文件系统时,由于各个文件系统都各自有一套的文件管理体系,是无法通过Linux本身访问文件的方式直接访问的, ...

  2. Linux 字符设备驱动开发基础(六)—— VFS 虚拟文件系统解析

    一.VFS 虚拟文件系统基础概念 Linux 允许众多不同的文件系统共存,并支持跨文件系统的文件操作,这是因为有虚拟文件系统的存在.虚拟文件系统,即VFS(Virtual File System)是 ...

  3. linux读取文件修改时间函数,Linux服务器编程之utime()函数修改文件存取时间

    Linux服务器编程之utime()函数修改文件存取时间 C语言utime()函数:修改文件的存取时间和更改时间 头文件: #include #include 定义函数: int utime(cons ...

  4. VFS - 虚拟文件系统的加载和导出

    VFS - 代码生成器预览功能实现 VFS - 虚拟文件系统基本操作方法的封装 VFS - 虚拟文件系统的加载和导出 这是 VFS 的最后一篇,前面两篇中的基本方法已经实现了一个简单的虚拟文件系统,可 ...

  5. VFS - 虚拟文件系统基本操作方法的封装

    VFS - 代码生成器预览功能实现 VFS - 虚拟文件系统基本操作方法的封装 VFS - 虚拟文件系统的加载和导出 接前一篇 VFS - 代码生成器预览功能实现 ,上一篇讲到了 mkdirs 封装创 ...

  6. Windows编程之CreateEvent,WaitForSingleObject,SetEvent,ResetEvent函数

    一 Windows编程之CreateEvent,WaitForSingleObject,SetEvent,ResetEvent函数 1 CreateEvent HANDLE WINAPI Create ...

  7. dup函数和dup2函数

    dup函数和dup2函数 有时我们希望把标准输入重定向到一个文件,或者把标准输出重定向到一个网络连接.这可以通过我们要介绍的用于复制文件描述符的dup和dup2函数来实现: #include < ...

  8. Linux·VFS虚拟文件系统

    目录 1 概念 2 架构 3 接口适配示例 4 跨设备/文件系统示例 5 VFS的抽象接口 6 Linux系统VFS支持的文件系统 7 统一文件模型(common file model) 7.1 Su ...

  9. 【文件系统】VFS虚拟文件系统

    1.VFS Linux支持各种各样的文件系统格式,比如说ext2,ext3,reiserfs,FAT,NTFS,iso9660等, 不同的磁盘分区,光盘或者其他存储设备都有不同的文件系统格式,然后这些 ...

最新文章

  1. 浅谈微信小程序生命周期
  2. VS2010中 C++创建DLL图解
  3. c++设计新思维_贵阳花溪区初三冲刺多少钱,新思维
  4. 【Elasticsearch】es 脑裂
  5. Windows 8及以上系统安装好SQL Server 2008之后找不到SQL Server配置管理器的问题
  6. 用 Go 构建一个区块链 -- Part 1: 基本原型
  7. Caused by: java.lang.IllegalArgumentException: Result Maps collection does not contain value for...
  8. grub4dos 制作WIN7、WINPE2003、Ubuntu、dos工具箱多启动U盘 (不量产)
  9. 熊迈摄像头SDK二次开发:登录、截屏、录像等功能
  10. 华为手机相册怎么镜像翻转_手机相册里的照片误删怎么恢复?简单操作就搞定...
  11. AutoCAD2011,2020安装教程
  12. java开发实战小参考常见问题及处理
  13. 前端微信签名验证工具_微信支付服务商签名验证无误,但是统一下单后服务器返回【签名错误】...
  14. linux登陆操作mysql
  15. 蓝桥杯刷题日记 更新到2022/2/5
  16. PostgreSQL 多维空间几何对象 相交、包含 高效率检索实践 - cube
  17. asp.net项目源码C#中学生健康档案管理系统VS开发sqlserver数据库web结构编程
  18. FFMPEG编译裁剪移植
  19. LARAVEL 消息模板推送
  20. 用代码批量打开Excel表格中的网址链接

热门文章

  1. boost::spirit模块实现附加语义动作的各种方法的测试程序
  2. boost::proto模块实现使用一个带有语法的域来修剪集合重载运算符的测试程序
  3. boost::mpl::string相关的测试程序
  4. boost::mp11::mp_transform_third相关用法的测试程序
  5. boost::mp11::mp_flatten相关用法的测试程序
  6. boost::hana::experimental::print用法的测试程序
  7. boost::geometry::num_geometries用法的测试程序
  8. boost::filesystem模块实现打印window属性的测试程序
  9. GDCM:gdcm::Filename的测试程序
  10. boost::iterator的用法测试实例