2012-08-17 28 views
9

私の質問に関連するいくつかの記事を見てきましたが、それを完全に解決するものはありません。私は、標準の一時ディレクトリにファイルを作成する必要がありますし、私はそれを書き終わった後、別の場所に移動します。そのアイデアは、ファイルがダウンロード中に一時的であるとみなされ、ダウンロードが完了した後に永続的になることです。一時ファイル名の取得方法は?

私はmkstempまたはtmpfileのいずれかを呼び出して、これを試しています。それに続いて、書き終わったらrenameです。しかし、リネームを呼び出すためにファイルのフルパスが必要で、明らかにファイル記述子(mkstempが返す)またはFILE *(tmpfileが返す)からファイル名を取得するのは簡単な処理ではありません。それはできますが、エレガントではありません。

一時ファイルを作成して名前を付けるシステムコールはありますか?私はmktempとそれに関連するコールについて知っていますが、それらは一意であるとは保証されていないか、非難されています。あるいは、一時ファイルの作成、書き込み、および移動を行うためのより良い方法があります。

答えて

10

実際にはmkstempのように見えます。この呼び出しの後

int fd; 
char name[] = "/tmp/fileXXXXXX"; 
fd = mkstemp(name); 
/* Check fd. */ 

あなたはfdで有効な記述とnameで関連するファイルの名前を持っています。

+0

あなたは正しいです、そして、私はドキュメントを読むとき、より徹底する必要があります。 OCDを私に呼びますが、私は[この記事](http://stackoverflow.com/questions/4790471/how-can-i-get-the-temporary-directory-path-in-ubuntu)の情報を使って単に "/ tmp"をハードコーディングする代わりに一時フォルダを作成します。 – jorgander

+0

/tmp /にファイルを作成していて、そのファイルを "/ home/ /のように特定の場所に移動しようとしている場合、cpや移動に時間がかかり、/ tmpと/ home /が別のパーティション領域にあるため、/ home//fileXXXXXのファイルを作成して/ home/ /ファイルに名前を変更してください。 – Viswesn

+0

最終ファイル名は何ですか? –

関連する問題