В UNIX-подобных системах, насколько я могу судить, он будет продолжать использовать оригинальный файл, при условии, что вы удалите (а не урежете) его.Такие системы действительно не удаляют файл, пока все дескрипторы файлов не будут закрыты (см. этот вопрос ), и я думаю, что это делается с помощью sqlite3_close
.
. Вы можете выполнить тест с помощью командыСтрока клиента:
echo "create table foo(a); insert into foo values(1);" | sqlite3 test1.db
echo "create table foo(a); insert into foo values(2);" | sqlite3 test2.db
sqlite3 test1.db
SQLite version 3.6.16
Enter ".help" for instructions
Enter SQL statements terminated with a ";"
sqlite> select * from foo;
1
Сейчас (в другой вкладке или окне):
rm test1.db; cp test2.db test1.db
Назад в sqlite:
sqlite> select * from foo;
1
strace
на клиенте подтверждаетчто он закрывает файл базы данных непосредственно перед выходом:
open("/tmp/test1.db", O_RDWR|O_CREAT|O_LARGEFILE, 0644) = 3
...
close(3) = 0
exit_group(0) = ?
Кроме того, я проверил, и нет никаких входящих вызовов close(3)
(т. е. номер дескриптора файла не используется повторно).