ファイルを新規作成するとき、仮ファイルを作って書ききってからリネームすると、
書いてる途中のファイルを「お、あるある」とか言って読まれないので比較的安全
#include <stdio.h> #include <stdlib.h> // mkstemp #include <unistd.h> // write int main() { // 仮ファイルを作って本文を書く char tmpname[] = "/tmp/unko_XXXXXX"; int fd = mkstemp(tmpname); write(fd, "hello\n", 6); close(fd); // 目的のファイル名にリネームする int result = rename(tmpname, "/tmp/hoge.txt"); if(result) perror("rename"); return 0; }
Man page of MKSTEMP
mkstemp() は、一時ファイルをオープンできる
そのとき、引数に書いた一時ファイル名の末尾の XXXXXX の部分を書き換えてユニークな名前を作ってくれる
(つまり、書き換えてくるので const char * はダメ)
(末尾以外に書いても無駄。 /tmp/unko_XXXXXX.txt みたいなのは作れない)
Man page of RENAME
すっかり忘れてたけど、ファイルシステムを跨げないので注意する