首页 > 系统服务 > 详细

11Linux服务器编程之:VFS虚拟文件系统,dup()函数和dup2()函数

时间:2014-09-16 00:23:49      阅读:346      评论:0      收藏:0      [点我收藏+]


1dup函数和dup2函数

#include<unistd.h>

int dup(intoldfd);

int dup2(intoldfd, int newfd);

 

dupdup2都可用来复制一个现存的文件描述符,使两个文件描述符指向同一个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虚拟文件系统

 

bubuko.com,布布扣

关于函数调用的实质

bubuko.com,布布扣

总结:

A:操作磁盘上的文件,都要经过驱动。

B:只要两个文件描述符指向的是同一个文件结构体,那么操作文件的时候就相当于在在文件后追加的过程,不会覆盖文件内容。如果同时用open打开两个文件,并且放回的两个文件描述符之间没有关联,那么这时候操作的时候一个写操作为覆盖另外一个写操作。

11Linux服务器编程之:VFS虚拟文件系统,dup()函数和dup2()函数

原文:http://blog.csdn.net/tototuzuoquan/article/details/39301435

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!