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(また、正当であり、時々デーモン/サービスコードで行われます)。

おすすめ記事