Dup2 делает больше, чем просто копирует дескриптор файла? - PullRequest
1 голос
/ 05 января 2012

Сначала я открываю файл, затем использую 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;
}

1 Ответ

2 голосов
/ 05 января 2012

По-видимому, фактические данные «открытого описания файла» подсчитываются по ссылкам, поэтому при дублировании файлового дескриптора все, что происходит, - это увеличение количества данных, на которые он ссылается.Когда вы вызываете close(), счет уменьшается.

Таким образом, закрытие первого дескриптора фактически не делает второй недействительным.

...