4

に一時ディレクトリを作成するタスクの場合、ポータブルコード用に、、などをどの/tmpように選択しますか?mkdtempmkstemp

4

1 に答える 1

13

他のユーザーが書き込み権限を持っている可能性のあるディレクトリ内に一時ディレクトリを作成する必要があると思います。

管理者は、各ユーザーが独自の名前空間を持つように設定する必要がありますTMPDIR(たとえば、pam-tmpdirを使用するか、プロセスごとの名前空間を使用するとさらに適切ですが、より多くの設定が必要になります)。ただし、アプリケーションライターとしては、これを想定することはできないため、誰でも書き込み可能なに対処する必要があります/tmp

ここでの正しい関数はmkdtempmkstemp通常のファイルしか作成できないためです。mkdtempPOSIX.1 2008でのみ導入されたため、原則として、まだすべてのPOSIXプラットフォームで使用できるとは限りません。ただし、それは長い間主要なプラットフォームで利用可能でした:

  • 2.2(1997)以降のOpenBSDで
  • 2.2.7(1998)以降のFreeBSDで
  • 1.4(1998)以降のNetBSDで
  • OSXで…10.0以降?
  • Linux(Glibcを使用)でGlibc 2.2(1999)以降
  • 少なくとも2001年以来dietlibcで
  • 当初からuClibcでは
  • MINIX3
  • Solaris10以降のSolarisのみ

したがって、実際には、を安全に使用できますmkdtemp。フォールバックが必要な場合は、OpenBSDの実装をソースに含めてください。

于 2012-09-24T20:45:43.087 に答える