5

Linux のシリアル ポートに関して解決しようとしている問題があります。ポートを正常に開き、読み取り、閉じることができます。ただし、特定の時点でポートから読み書きするのは私だけである必要があります。

open() 関数呼び出しを行った後、これはすでに行われていると思いました。ただし、プログラムの同じポートで open() を複数回呼び出すことができます。同じポートから同時に読み取る 2 つのスレッドを持つこともできます。

flock() でこの問題を修正しようとしましたが、まだ同じ問題がありました。オープンと読み取りの各セットに異なるファイル記述子が関係しているにもかかわらず、両方のシステムコールが同じ pid から来ているためですか? 記録のために、両方の open() 呼び出しは有効なファイル記述子を返します。

その結果、問題を解決できる方法があるかどうか疑問に思っています。私のプログラムの観点からは、open() への 2 つの呼び出しが同じポートで成功しても大したことではありません。ただし、ポートを開くときに、ポートにアクセスできる唯一のプロセスであることを確認したいだけです。

助けてくれてありがとう。

4

2 に答える 2

0

flock() 関数を使用して問題を修正できました。何らかの理由で、構造体と fcntl() の使用が機能しませんでした。flock() を使用すると、2 行のコードを追加して問題を解決できました。

于 2013-07-31T21:17:12.313 に答える