Вопросы по dup2 и многопоточности

0

Я встречаю очень строгие проблемы с dup2 и несколькими потоками, код выглядит так:

pipe out, err;
int forkpid = fork();

if (forkpid == 0) {
    dup2(out.writeFd, STDOUT_FILENO);
    dup2(err.writeFd, STDERR_FILENO);
    printf("hello\n");
}

do {
    int res = poll(&fds, 2, 200);
    if (res) {
        for (int i = 0; i < 2; i++) {
            bytes = read(fds[i].fd, buff, size);
            if (fds[i].fd == out.readFd)
                printf("out\n");
            if (fds[i].fd == err.readFd)
                printf("err\n");
        }
    }
} while(....);

Я тестировал код в отдельном проекте, я вижу, что "hello" выводится из std, но как только я помещаю его в большой проект, "hello" выводится из err :(

Я использую xcode5.0 и смешиваю c++ и цель c. любая идея об этом? благодаря

  • 0
    Можете ли вы свести это к короткому, самодостаточному, правильному, компилируемому примеру, который демонстрирует вашу проблему?
  • 0
    @AdamRosenfield, оригинальный код - огромный проект, и на самом деле я пробовал этот код в очень небольшом проекте XCode, он отлично работает. о ... Хорошо, я только что попробовал это: написать (STDOUT_FILENO, "привет", 5); он пишет в stdout, что означает, что что-то изменило вывод printf на stderr ...
Показать ещё 2 комментария
Теги:
macos
fork
dup2

1 ответ

0

Я нашел причину. Ранее я реализовал printf с NSlogV, и я забыл об этом. По умолчанию NSlogV выводит информацию в stderr. так что причина. - Jet

Ещё вопросы

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