Linux文件共享(三)——dup
dup返回的新文件描述符是當前可用文件描述符中的最小值。它返回的新描述符與參數fd共享一個文件表項(file對象)。調用dup會使file的引用計數增1,即增加“打開文件”引用計數。圖3-3是apue中的原圖。
我們用以下程序測試並說明:
#include <stdio.h> #include <unistd.h> #include <fcntl.h> #include <string.h> #define FILE_MODE (S_IRUSR|S_IWUSR|S_IRGRP|S_IROTH) int main(int argc, char *argv[]) { int fd1=0,fd2=0; char buf1[]="hello"; char buf2[]="world"; fd1=open("./txt",O_RDWR|O_CREAT,FILE_MODE); printf("fd1:%d\n",fd1); fd2=dup(fd1); printf("fd2:%d\n",fd2); if((write(fd1,buf1,strlen(buf1)))!=strlen(buf1)) printf("write fd1 error!!!\n"); close(fd1); if((write(fd2,buf2,strlen(buf2)))!=strlen(buf2)) printf("write fd2 error!!!\n"); return 0; }
運行結果如圖:
我們發現第一次調用close,文件並沒有真正關閉,因為dup是file的引用計數為2,close(fd1),隻是使引用計數變為1,而file對象並沒有銷毀。我們可以用圖形表示調用dup後的情況。
總結:dup會增加“打開文件引用計數”(file對象的引用計數),造成兩個描述符指向同一file對象。但不會創建新的file對象。
最後更新:2017-04-03 12:56:03