【问题标题】:Can I get a callback / do I know when SQLite has created write-ahead log files? I want to chmod them我可以得到回调/我知道 SQLite 何时创建了预写日志文件吗?我想chmod他们
【发布时间】:2012-09-26 21:27:29
【问题描述】:

我有一个提升的进程,我想确保它创建的 SQLite 文件可以被其他进程读取。出于某种原因,umask 似乎没有做我想做的事情(设置进程创建的 sqlite 文件的权限)。

我正在使用预写日志记录,因此除了数据库文件之外,还会创建 -wal-shm 文件。我希望所有 3 个都正确修改。

我想知道SQLite文件创建后chmod它是否可以进入。

可能的方法:

  1. touch SQLite 尝试创建它们之前的所有 3 个文件,然后 chmod 并希望掩码保持不变
  2. 在创建文件时拦截并chmod 他们。
  3. 找出如何让umask 为该流程工作。
  4. 神秘选项四。

最好的方法是什么?

方法问题:

  1. SQLite 可以接受这个吗?
  2. 我们知道所有 3 个文件的创建时间吗?是否有某种回调我可以给函数指针?我们是否知道相同的 walshm 文件是否永远存在?还是它们被删除并重新创建?

【问题讨论】:

    标签: sqlite posix file-permissions chmod umask


    【解决方案1】:

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

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

    -wal-shm 文件是动态创建的,但 SQLite 将赋予它们与主数据库文件相同的权限位。 robust_open() in os_unix.c 的 cmets 说:

    如果文件创建模式“m”为0,则将其设置为默认值 SQLite。默认值为 SQLITE_DEFAULT_FILE_PERMISSIONS(通常 0644) 由系统 umask 修改。如果 m 不为 0,则 使文件创建模式完全忽略umask。

    只有在创建-wal、-journal、 和 -shm 文件。我们希望这些文件完全相同相同 权限作为他们的原始数据库,不受 umask 的影响。 这样,如果一个数据库文件是-rw-rw-rw-rw-rw-r-,并且一个 交易崩溃并留下热门日志,然后任何 能够写入数据库的进程也将能够 恢复热门期刊。

    【讨论】:

    • 有趣。您能否提供“SQLite 将给予他们相同的权限位”的参考资料?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-10-27
    • 2018-01-04
    • 1970-01-01
    • 2011-10-10
    • 1970-01-01
    • 2012-06-07
    • 1970-01-01
    相关资源
    最近更新 更多