Estou abrindo um pseudo-terminal com a função openpty . Isso será usado para redirecionar alguns dados provenientes de uma porta serial para um aplicativo externo (neste caso, um receptor GPS).
O fato é que às vezes eu estou recebendo um zero para o descritor de arquivo mestre (no código abaixo, parâmetro mpty). Nesses casos, o redirecionamento não funciona e o aplicativo externo não está recebendo nenhum dado, o que eu suponho ser normal, pois zero é o Input Padrão descritor.
O que estou fazendo errado? É possível bloquear o stdin para ser o mestre com a função openpty?
Obrigado antecipadamente.
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;
}