Я чувствую, что dup2() избыточен

насколько я понимаю, если у меня есть два файловых дескриптора

int fd1, fd2;

что обе эти функции:

dup2(fd1, fd2);

И -

fd1 = dup2(fd1, fd2);

будет, по сути, выполнять ту же задачу.

Какой смысл в том, что dup2() имеет возвращаемое значение? и если возвращаемое значение dup2() является просто дескриптором файла, зачем использовать dup2, если вы можете просто сказать:

fd2 = fd1;

Здесь явно что-то, чего мне не хватает.

Кстати: пожалуйста, не говорите мне читать man-страницу или какую-то книгу, которой у меня нет. Это бесполезно.


person Chris Phillips    schedule 17.03.2014    source источник
comment
Может быть, лучше спросить, почему у нас есть и dup, и dup2.   -  person pat    schedule 18.03.2014


Ответы (2)


Чего вам не хватает, так это того, что он не копирует переменную, содержащую значение fd, он создает второй fd, который ссылается на тот же открытый файл, что и исходный fd. Затем эти два файловых дескриптора действуют независимо.

Однако одним из основных способов использования dup2 является «повторное открытие» дескриптора stdio для уже открытого файла. Например, для передачи данных между двумя дочерними процессами вы должны сначала использовать pipe для создания канала с двумя файлами fd. Затем в каждом дочернем процессе dup2 будет использоваться для замены stdin или stdout одним из каналов fds.

person DoxyLover    schedule 17.03.2014

Гм.. это одна и та же функция. В первом случае вы просто игнорируете возвращаемое значение.

И указанное возвращаемое значение также может быть кодом ошибки. Что бы вы увидели, если бы вы RTFM: D

Также согласно TFM

dup2() makes newfd be the copy of oldfd, closing newfd first if necessary
. . .
(caveats left out)
person Peter M    schedule 17.03.2014