我正在打开一个伪终端开放式功能。这将用于将来自串行端口的一些数据重定向到外部应用程序(在本例中为 GPS 接收器)。
事实是,有时我会得到一个amaster 文件描述符为零(在下面的代码中,空参数)。在这些情况下,重定向不起作用,并且外部应用程序没有接收任何数据,我认为这是正常的,因为零是标准输入描述符。
我做错了什么?是否可以用openpty函数阻止stdin成为master?
提前致谢。
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;
}