openpty는 기본 파일 설명자로 0을 반환합니다.

openpty는 기본 파일 설명자로 0을 반환합니다.

의사 터미널을 열고 있어요열려 있는기능. 이는 직렬 포트의 일부 데이터를 외부 애플리케이션(이 경우 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;
}

답변1

0은 유효한 파일 설명자입니다. 이것openpty전화 회의(예:open)은 양의 정수(0 이상)를 반환합니다. 잘못 되었을 -1때 반환되었습니다 .

성공적인 호출은 새로운(이전에 사용되지 않은) 파일 설명자를 반환합니다. 종료했다는 결과를 얻을 수 있습니다stdin(또한 합법적이며 가끔 데몬/서비스 코드에서 수행됩니다).

관련 정보