%20%E3%82%92%E4%B8%80%E6%99%82%E3%83%87%E3%82%A3%E3%83%AC%E3%82%AF%E3%83%88%E3%83%AA%E3%81%A8%E3%81%97%E3%81%A6%E4%BD%BF%E7%94%A8%E3%81%97%E3%81%BE%E3%81%99.png)
/run/shm
(以前の)にディレクトリを作成し/dev/shm
、それをアプリケーションの一時ディレクトリのように使用するのは良い方法でしょうか?
背景: ファイルとディレクトリで多くのことを実行するプログラムのブラック ボックス テストを作成しています。すべてのテストで、多数のファイルとディレクトリを作成し、プログラムを実行してから、予想されるファイルとディレクトリのセットを作成し、比較するために diff を実行します。現在、約 40 のテストがあり、実行にすでに 2 秒以上かかっています。処理速度を上げるために、何らかの RAM ディスク上のディレクトリでテストを実行したいと考えています。
RAMディスクについて調べていたら偶然見つけた質問ディレクトリを作成してそれを一時ディレクトリのように使用することは問題ないという回答がありました/dev/shm
。しかし、さらに調査したところ、ウィキページdebian からは、直接使用するとエラーになるというメッセージが出ています/dev/shm
。関数を使用する必要がありますshm_*
。残念ながら、shm_*
関数はシェル スクリプトでは使用できないようです。
今、私は混乱しています。/run/shm
(以前の/dev/shm
) を一時ディレクトリのように使用してもよいのでしょうか、それともしてはいけないのでしょうか?
答え1
/run
適切な権限を持っている限り、のディレクトリを使用することはまったく問題ありません。最近のディストリビューションの中には、/tmp
がすでにメモリ内の仮想ファイル システムになっているものや、 内のディレクトリへのシンボリック リンクになっているものがあります/run
。これが当てはまる場合 ( で確認するか/etc/fstab
、 と入力できます)、 を一時ディレクトリとしてmtab
使用できます。/tmp
また、Debian の記事と混同しないでください。shm_*
関数は、プロセス間通信用の共有メモリ セグメントを作成するために使用されます。これらの関数を使用すると、2 つ以上のプロセス間でメモリのフラグメントを共有し、同じデータを使用して通信または共同作業を行うことができます。プロセスは、独自のアドレス空間に接続されたメモリ セグメントを持ち、通常どおりに読み取りと書き込みを行うことができます。カーネルが複雑な処理を行います。これらの関数は、シェル関数として使用できません (シェルのコンテキストではあまり役に立ちません)。詳細については、を参照してくださいman 7 shm_overview
。この記事のポイントは、共有セグメントを表す疑似ファイルを直接管理するプログラムは存在せず、代わりに適切な関数を使用して共有メモリ セグメントを作成、接続、削除する必要があるということです。