Я предлагаю вам загрузить эти файлы во временную папку, а затем переместить их в нужную папку после завершения загрузки.
Чтобы вы знали, что все файлы в нужной папке полностью скачаны.
Да, это гарантировано.
Вы явно не указываете, как вы работаете с вложенной файловой системой, но я предполагаю, что вы используете блочное устройство обратной связи.
В этом случае бит ключа можно увидеть здесь в исходном коде ядра:
static int lo_req_flush(struct loop_device *lo, struct request *rq)
{
struct file *file = lo->lo_backing_file;
int ret = vfs_fsync(file, 0);
if (unlikely(ret && ret != -EINVAL))
ret = -EIO;
return ret;
}
Обратите внимание на вызов vfs_fsync(file, 0)
. Это означает, что драйвер обратной связи явно вызывает синхронизацию файла, который поддерживает блочное устройство обратной связи.
В заказе нет гранта, но наиболее вероятным способом является то, что ядро проходит через таблицу монтирования при вызове sync(2)
. Этот метод используется в Solaris и, скорее всего, в Linux.
Похоже, это то, что вам не нравится, поэтому в вашем случае должно выполняться нечто большее, чем вызов синхронизации.