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()函数的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 什么是两年不可抗辩条款
- 下一篇: 1虚拟地址,虚拟内存映射,系统调用本质,