2012-01-05 1 views
1

まず、ファイルを開き、dup2を使用してファイル記述子をコピーします。なぜ、最初のファイル記述子が閉じても、もう1つのファイル記述子を使ってファイルを読み込めますか?推測でdup2はファイル記述子をコピーする以上のことをしていますか?

#include <fcntl.h> 
#include <stdio.h> 
#include <errno.h> 
#include <unistd.h> 

int main(int argc, char *argv[]) 
{ 
    int fd,fd2=7; /*7 can be any number < the max file desc*/ 
    char buf[101]; 

    if((fd = open(argv[1], O_RDONLY))<0)  /*open a file*/ 
     perror("open error"); 
    dup2(fd,fd2);        /*copy*/ 
    close(fd); 

    if(read(fd2,buf,100)<0) 
     perror("read error"); 
    printf("%s\n",buf); 

    return 0; 
} 
+0

試しましたか?それは動作しましたか?もちろん、 –

+0

です。 – sinners

答えて

2

、実際の「オープン・ファイル記述」は、ファイル記述子を複製したときに起こることすべてが、それが参照するデータのカウントがインクリメントされていることであるように、データは、参照カウントです。 close()に電話すると、カウントが減少します。

したがって、最初のディスクリプタを閉じても、実際には第2のディスクリプタは無効になりません。

+0

ありがとうございます。あなたが正しいです。私はそれを見つける[close-file-descriptor](http://unix.stackexchange.com/questions/25498/what-happens-when-i-close-a-file-descriptor)。 – sinners

関連する問題