/ procファイルシステムで「ファイル」のように動作するカスタムファイルを実装する方法はありますか?

/ procファイルシステムで「ファイル」のように動作するカスタムファイルを実装する方法はありますか?

永続性名前付きパイプのようなものを探しています...catまたはgrepを複数回使用でき、常にパイプに供給するすべてのプロセスの現在の状態を取得できます。

/tmp/timestampたとえば、名前付きパイプを作成し、次のように書くとしdateます。

mkfifo /tmp/timestamp
date --iso-8601=seconds > /tmp/timestamp

この時点で、ペアへの呼び出しはdateブロックされ、/tmp/timestamp読み取りを待ちます。

cat `/tmp/timestamp`

ブロックがブロック解除され、stdoutに書き込むなどのdate内容が表示され、終了します。2017-03-18T16:11:54-04:00date

...しかし、毎回日付を更新したい場合はどうすればよいですかcat /tmp/timestamp

そうかもしれないと思います。

while :; date --iso-8601=seconds > /tmp/timestamp; done

うまくいきますが、a)このアプローチには明らかではない問題があるのか​​、b)ループが不要な方法があるのか​​疑問に思います。

また、FIFOを常に使用できるように自動的に起動するように設定したいと思います。

これをパイプラインに入れたいのは、関連情報がWebアプリケーションをサポートするデータベースに格納されるためです。ほとんどのテクニカルサポートスタッフは、SSHを介してサーバーにログインし、データベースでクエリを実行することを嬉しく思いますが、いくつかの重要な統計があります。本物ファイルから単にgrepするのが便利です。名前付きパイプを含むディレクトリにアクセスできる場合は、lsこれらのエントリをすべて検索できます。本質的にしなければならないので、これを行うのではなく、良いたとえ話だと思うので行うことです。

答え1

カスタムファイルシステムをカーネルモジュールとして実装したり、サーキットブレーカを使用したりできます。対応するカスタムファイルシステム内で必要な仮想ファイルを持つことができます。

答え2

これはループの「明らかな問題」です。読み取りプロセスがfifoを開いたままにしている場合(たとえば、他のファイルを開く間にブロックまたは停止するため)、書き込みループは継続的に実行されます(fifoバッファがいっぱいになるまで)。複数の同時リーダーには問題がありますが、おそらくその可能性を合理的に排除できます。

非ループソリューションでは、fifoの代わりにソケットを使用できますが(単純な)リーダープログラム(またはそのプログラム以外のものを実行するにはパイプ)を作成する必要がありcatますopen

関連情報