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;
}
4

1 に答える 1

2

推測では、実際の「開いているファイル記述」データは参照カウントされているため、ファイル記述子を複製すると、それが参照するデータのカウントがインクリメントされるだけです。を呼び出すclose()と、カウントが減少します。

したがって、最初の記述子を閉じても、実際には 2 番目の記述子が無効になるわけではありません。

于 2012-01-05T09:15:03.450 に答える