Ошибка защиты дескрипторов файлов ввода и вывода

0

Хорошо, я делаю трубку, чтобы связаться с детьми моего процесса. Во-первых, я попытался сделать защиту своих fds, поэтому я могу получить к ним доступ позже для некоторых вещей, но почему-то это просто застревает при дублировании fds.

int pipeFd [2];
int pid;
pipe (pipeFd);

//Safeguard of the Original FDs
int fdSG [2];
perror ("fdsg create");
dup2 (1, fdSG [1]);
perror ("dup2 sfg1");
dup2 (0, fdSG [0]);
perror ("dup2 sfg2");
dup2 (pipeFd [1], 1);

Программа застряла в последней инструкции, показанной здесь.

Вывод терминала следующий:

fdsg create: Success
dup2 sfg1: Bad file descriptor
dup2 sfg2: Bad file descriptor
dup2: Bad file descriptor

Кто-нибудь из вас знает, почему это происходит?

  • 0
    Ваш код, кажется, в порядке. Я предлагаю сделать ремешок.
  • 0
    perror вызывать perror если на самом деле не было ошибки. (Вы должны проверить возвращаемые значения)
Показать ещё 7 комментариев
Теги:
pipe
file-descriptor

1 ответ

1
Лучший ответ

Из кода, который вы показали, вы не инициализировали fdSG. Это неверно, аргументы dup2 оба должны быть действительными файловыми дескрипторами.

Поскольку вы, похоже, хотите скопировать fd вместо замены существующего, вместо этого вы должны использовать dup для этих резервных копий, он выбирает бесплатный fd и использует это. (В качестве альтернативы вы можете включить fdSG в действительные fds тоже).

С manpage:

dup() использует неиспользуемый дескриптор с наименьшим номером для нового дескриптора.

  • 0
    Thx, кажется, что это сработало, глупо с моей стороны не обращать внимания на эту деталь.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню