に一時ディレクトリを作成するタスクの場合、ポータブルコード用に、、などをどの/tmp
ように選択しますか?mkdtemp
mkstemp
fche
質問する
1340 次
1 に答える
13
他のユーザーが書き込み権限を持っている可能性のあるディレクトリ内に一時ディレクトリを作成する必要があると思います。
管理者は、各ユーザーが独自の名前空間を持つように設定する必要がありますTMPDIR
(たとえば、pam-tmpdirを使用するか、プロセスごとの名前空間を使用するとさらに適切ですが、より多くの設定が必要になります)。ただし、アプリケーションライターとしては、これを想定することはできないため、誰でも書き込み可能なに対処する必要があります/tmp
。
ここでの正しい関数はmkdtemp
、mkstemp
通常のファイルしか作成できないためです。mkdtemp
POSIX.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 に答える