LINUX.ORG.RU

Проблема с dup2


0

0

Добрый день. Возник у меня следующий вопрос: создаются сокеты с помощью socketpair, далее выполняется fork. В форкнутой части вызывается функция dup2, вроде все хорошо но при попытке записи через копию описателя данные не передаются на приемную сторону, с оригинальным хендлом все нормально. Ниже пример кода форкнутой и нормальной части.

void NormalPart(int sockets[2]) { close(sockets[1]); char buffer[255] = {0}; while (read(sockets[0], buffer, 255) > 0); close(sockets[0]); }

void ForkPart(int sockets[2]) { sigset_t sigs; sigemptyset(&sigs); sigprocmask(SIG_SETMASK,&sigs,0); close(sockets[0]); int null = open("/dev/null", O_RDWR); if (null != -1 && dup2(null, STDOUT_FILENO) != -1 && dup2(null, STDERR_FILENO) != -1 && dup2(null, STDIN_FILENO) != -1 && dup2(sockets[1], 3) != -1) { ....... close(null); write(sockets[1], "test", 5); //работает write(3, "test", 5); //не работает close(sockets[1]); } _exit(127); } Буду благодарен за любые комментарии...

anonymous

  int fds[2];
  if (pipe (fds) == -1)
    return exception (env, __SELF__, "IOError", "Cannot create pipe");
  char *s = CSTR (__ARG__);
  if (!fork ())
    {
      dup2 (fds[0], 0);
      dup2 (fds[1], 1);
      execl ("/bin/sh", "sh", "-c", s, NULL);
      free (s);
      close (fds[0]);
      close (fds[1]);
      exit (127);
    }
  else
    free (s);

Такая программа запускает комманду s. Взаимодействие затем с вторым процессом ведется через fds[0] и fds[1].

kmeaw ★★★
()

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

vnp
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.