2012-09-26 36 views
0

我有一个提升的过程,我想确保它创建的SQLite文件可以被其他进程读取。出于某种原因,umask似乎没有做我想做的(设置进程创建的sqlite文件的权限)。我可以得到一个回调/我知道SQLite创建预写日志文件时吗?我想chmod他们

我正在使用预写日志记录,所以除数据库文件外还创建了-wal-shm文件。我希望所有3被正确地chmodded。

我想知道是否有可能在创建SQLite文件后进入chmod呢。

可能的方法:

  1. touch所有3个文件的SQLite尝试之前创建它们,然后chmod和希望面膜停留在文件被创建相同
  2. 拦截和chmod他们。
  3. 找出如何让umask为这个过程工作。
  4. 神秘选项四。

什么是最好的方式去?

问题的方法:

  1. 将SQLite的是这个行吗?
  2. 我们知道何时创建所有3个文件?有什么回调我可以给一个函数指针?我们知道同一个walshm文件是否永远存在?或者他们被删除并重新创建?

回答

1

打开它之前可以触摸数据库文件。 (当您使用sqlite3命令行工具来打开一个新文件,但做什么,但begin;commit;时,SQLite本身会创建一个零大小的文件。)

如果你想拦截的文件操作,您可以注册你自己的VFS

-wal-shm文件是动态创建的,但SQLite会为它们提供与主数据库文件相同的权限位。在​​robust_open()评论说:

如果文件创建模式“m”是0,那么将它设置为默认的 SQLite的。默认值为SQLITE_DEFAULT_FILE_PERMISSIONS(通常为 0644),由系统umask修改。如果m不为0,则 使文件创建模式正好忽略umask。

只有在创建-wal,-journal, 和-shm文件时,m参数才会为非零。我们希望这些文件具有正好相同的 权限作为其原始数据库,由umask unadulterated。 这样,如果一个数据库文件是-rw-rw-rw-rw-rw-r-,并且一个 事务崩溃并且留下热日志,那么任何能够写入数据库的进程也将能够 恢复热日志。

+0

有趣。你可以给“SQLite会给他们相同的权限位”的参考吗? – Joe

相关问题