0

少し問題があります。/dev/term/0 などのシリアル ポートを使用しており、このデバイスへの複数のアクセスをロックする必要があります。そのために、次のコードを使用します。

int hComm;
hComm = open(portName, O_RDWR | O_NOCTTY | O_NDELAY);
if(hComm != -1){
    ioctl(hComm, TIOCEXCL, NULL);
    int flags = fcntl(hComm, F_GETFL, 0);
    flags &= ~O_NDELAY;
    fcntl(hComm, F_SETFL, flags);
}

すべて正常に動作します。次に、別のアプリケーションを実行してこのポートを開こうとすると、エラー EBUSY が発生します。問題はありませんが、この瞬間に最初のアプリケーションが動作を停止します。このポートを読み書きできず、閉じることができません。エラー ENXIO (No such device or address) が常に 1 つしかありません。

このコードを Linux と Mac OS X でテストしたところ、すべて問題なく動作しましたが、Solaris では...

どうすればいいのかわからない。

4

0 に答える 0