openpty возвращает ноль в качестве дескриптора главного файла

Я открываю псевдотерминал функцией openpty . Это будет использоваться для перенаправления некоторых данных, поступающих из последовательного порта, во внешнее приложение (в данном случае в приемник GPS).

Дело в том, что иногда я получаю ноль для дескриптора главного файла (в приведенном ниже коде параметр mpty). В этих случаях перенаправление не работает, и внешнее приложение не получает никаких данных, что, как я полагаю, является нормальным, поскольку ноль - это дескриптор Standard Input .

Что я делаю не так? Можно ли заблокировать stdin в качестве ведущего с помощью функции openpty?

Заранее благодарим.

bool openPts(char* ptsName, int* mpty, int* spty) {

    if (openpty(mpty, spty, ptsName, NULL, NULL) == -1) {
        printf("openPts: ERROR openpty [%d] %s",
            errno, strerror(errno));
        return false;
    }

//  if (*mpty == 0 || *spty == 0) {
//      printf("openPts: ERROR openpty mpty[%d] spty[%d] [%d] %s",
//          *mpty, *spty, errno, strerror(errno));
//
//      if (*mpty > 0) {
//          close(*mpty);
//      }
//      if (*spty > 0) {
//          close(*spty);
//      }
//      return false;
//  }

    ///////////////////////////////////////////////////////////////////
    //Set non-blocking
    if (setNonblock(*mpty) == -1) {
        printf("openPts: mpty[%d] NONBLOCK ERROR [%d] [%s]",
            *mpty, errno, strerror(errno));
    }
    if (setNonblock(*spty) == -1) {
        printf("openPts: spty[%d] NONBLOCK ERROR [%d] [%s]",
            *spty, errno, strerror(errno));
    }
    ///////////////////////////////////////////////////////////////////
    printf("openPts[%s]: fd MASTER[%d] fd SLAVE[%d]",
        ptsName, *mpty, *spty);

    return true;
}

0
02.02.2016, 12:06
0 ответов

Теги

Похожие вопросы