17

私の質問に関連する投稿を見たことがありますが、完全に対処しているものはありません。標準の一時ディレクトリにファイルを作成し、書き込みが完了したら別の場所に移動する必要があります。ファイルは、ダウンロード中は一時的であり、ダウンロードが完了した後は永続的であると見なされるという考え方です。

mkstempまたはtmpfileを呼び出してこれを試みており、書き込みが完了したら名前を変更します。ただし、rename を呼び出すにはファイルのフル パスが必要であり、明らかにファイル記述子 (mkstemp によって返される) または FILE * (tmpfile によって返される) からファイル名を取得することは簡単なプロセスではありません。それはできますが、エレガントではありません。

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

4

1 に答える 1

18

mkstemp実際に進むべき道のようです。

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

この呼び出しの後、有効な記述子が にfdあり、関連付けられたファイルの名前が にありますname

于 2012-08-17T15:07:13.613 に答える