码迷,mamicode.com
首页 > 系统相关 > 详细

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

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

标签:style   blog   http   io   os   ar   文件   2014   div   



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()函数

标签:style   blog   http   io   os   ar   文件   2014   div   

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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!