
의사 터미널을 열고 있어요열려 있는기능. 이는 직렬 포트의 일부 데이터를 외부 애플리케이션(이 경우 GPS 수신기)으로 리디렉션하는 데 사용됩니다.
문제는 가끔 내가amaster 파일 설명자가 0입니다.(아래 코드에서는 매개변수가 비어 있습니다.) 이러한 경우 리디렉션이 작동하지 않고 외부 응용 프로그램이 데이터를 수신하지 않습니다. 0은 정상이므로 정상이라고 가정합니다.표준 입력설명자.
내가 뭘 잘못했나요? openpty 기능을 사용하여 stdin이 마스터가 되는 것을 방지할 수 있습니까?
미리 감사드립니다.
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;
}