planetfsで通信

planetfsは自分が作っているネットワーク透過性、ネットワークのファイル抽象化を目的としたファイルシステムです。
Github: pfpacket / fuse_planetfs

当初の目標を一応のところ果たしたのでどんな感じになったか書いてみる。

ここLinusLinuxの音声ファイルがあります。
これをローカルからリモートで再生したい場合、普通であればネットワーク用のコマンドを用いなければなりませんが、planetfsを使うと特別なツールを使わずにLinuxの基本的なコマンドだけでできます。

TCPの8000番ポートで通信する場合:
リモート側:

touch /net/tcp/\*\!8000
cat /net/tcp/\*\!8000 > /dev/audio

ローカル側:

cat english.au > /net/tcp/127.0.0.1\!8000

これでリモート側で音声が流れます。

ちょっと説明
リモート側の

touch /net/tcp/\*\!8000

でまずTCPの8000番ポートにサーバーを立てます。(touchコマンドがファイルをopen(2)するのでCtrl-C)
次にcat コマンドで先ほど作成したサーバーファイルを開くことでlisten状態になり、相手がconnect(2)してきた時点で、catコマンドが発行したopen(2)が返ります。あとはcatコマンドがファイルからread(2)して/dev/audioにwrite(2)するので受けとったファイルが/dev/audioに流れて、音声が再生されます。

ローカル側では/net/tcp/接続先IPアドレス!ポート番号 をopen(2)することで相手先に接続出来ます。
catコマンドでLinusの発音ファイルenglish.auを/net/tcp/127.0.0.1\!8000にリダイレクトすることで127.0.0.1:8000番地に接続し、音声ファイルを送った後catコマンドが終了します。
ちなみに/net/tcp/127.0.0.1\!8000をrmしないとリモート側では音声が流れた後もcatコマンドが終了しません。ローカル側で接続ファイルをrmすることでコネクションが切断されます。

次はTCPのコネクション毎にディレクトリを作成しようなどと考えています。