Linuxを使用して2つのプロセス間でシリアルポートを直接共有することはできないので、これを達成する別の方法を探しています。socatについて聞いたことがありますが、以下を実現する具体的な例を見つけることができませんでした。
1つのプロセスはデータを送信するだけでよく、もう1つはデータを受信するだけでよいため、1つの物理シリアルポート(/ dev/ttyUSB0)を読み取り用と書き込み用の2つの仮想ポートに分割します。
残念ながら送信アプリの変更はできません。
Linuxでは、不要な干渉を制限する唯一の方法はユーザー/グループのアクセス権であるため、シリアルポートへの排他的アクセスを取得することは常に問題でした。
時間の経過とともに、あるプロセスがシリアルポートデバイスを「所有」する意思がある場合にシリアルポートデバイスを開かないように他のプロセスに指示する方法が確立されました。シリアル(パラレル)ポートを開くプロセスは、最初にロックファイルをチェックします。 /tmp
ディレクトリ(他の規格では/var/lock
ディレクトリを使用する場合があります)。たとえば、ttyS0デバイスの場合は/tmp/LCK..ttyS0で、そのPID
をそのファイルに書き込みます。次に、それを読み戻し、PID
が一致する場合、プロセスはポートの所有権を取得しました。ポートが不要になると、ロックファイルはプロセスによって削除されます。
したがって、これらのプロセスuidまたはgidsがデバイスでrwアクセスを持っている場合は、さまざまなプロセスから開くことができます