Linuxでは、C関数はmkstempより少ない安全なコマンドラインプログラムmktempのですか?

StackOverflow https://stackoverflow.com/questions/499450

  •  20-08-2019
  •  | 
  •  

質問

どちらの操作は、空のファイルを作成し、ファイル名を返すが、はmkstempは排他モードで開いているファイルを残して、あなたにハンドルを与えます。 C-機能への安全上の利点はありますか?これはコマンドライン版の安全穴があることを暗示していますか?

彼らのmanページに(または類似)

は余談として、それはLinux上でC APIのいくつかの関連する機能があることは興味深いし、それらのほとんどは、「この機能を使用しないでください」と言っています。

役に立ちましたか?

解決

あなたは簡単にmktemp(1)ソースコードから見ることができるように

、それは本質的mkstemp(3)を呼び出すが、何もしません。

Linuxでの排他モードは、関数は、ファイルがすでに存在する場合、それはロック保証するものではありません失敗することを意味します。他のプロセスは、プロセスによってopen(3)されているファイルハンドルにもかかわらず、それを再度作成し、データとそれを埋める、このファイルを削除することができます。

コマンドラインユーティリティに比べC関数に追加の安全性はありません。

他のヒント

(LinuxおよびMac OSを含む)Unixライクなオペレーティングシステムでは、一時ファイルと1つのトリックは、ファイルを開くと、それを削除するとすぐです。あなたのプログラムが恐ろしい死を死ぬ場合でも、あなたはまだファイルにアクセスすることができますが、誰もがそれを見ていないか、それには何も行うことができ、そしてそれは、すぐにあなたがファイルを閉じると消えます。

システムコールとコマンドライン機能の間の最も明白な違いは、システムコールは、常にプログラムによって行われている間に、コマンドライン機能は、人々や彼らのシェルスクリプトで使用されていることです。

人にファイルハンドルを手にかなり難しいだろう。

「安全」について、あなたは競合状態を考える必要があります。同時に1プログラム呼び出しはmkstempのいくつかのインスタンスが、それぞれが独自の一時ファイルを持つことが保証されています。プログラムが出て砲撃し、コマンド・ライン・バージョンと呼ばれる場合は、これを保証することはほとんど不可能になると思います。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top