?

Log in

No account? Create an account
 
 
12 July 2012 @ 01:37 am
Атомарное создание файла  
Почему в позиксе нет функции flink(int fd, const char *name)?
Её отсутствие не даёт возможности атомарного создания файла с нужным содержимым. Чтобы можно было создать inode без имени, наполнить его, и присвоить имя только когда он уже готов для дальнейшей обработки. Нет - нужно временное имя, потом rename(), плюс чистка от временных файлов, образовавшихся при обрыве связи, защита от обработки временных файлов, и так при каждом cp, scp, ftp, wget... :-(

Кстати, правильно ли я понимаю, что tmpfile() реализуется как неатомарная последовательность open()+unlink(), или есть syscall, создающий безымянный inode на указанном разделе?
 
 
 
netch80netch80 on October 15th, 2012 06:21 am (UTC)
Создать inode без имени *где*?

> правильно ли я понимаю, что tmpfile() реализуется как неатомарная последовательность open()+unlink()

да.
Pavel Gulchouck: gulgul_kiev on October 15th, 2012 06:40 am (UTC)
> Создать inode без имени *где*?

На указанном разделе. Как атомарный mkstemp()+unlink().