c++ - 成功执行boost::filesystem::last_write_time需要哪些权限?

标签 c++ linux file-permissions boost-filesystem

这个简单的代码:

std::time_t tm = boost::filesystem::last_write_time( filename );
boost::filesystem::last_write_time( directory, tm );

如果 directory 则抛出“不允许操作”异常是执行代码的用户以外的用户拥有的路径。

我对此感到有点困惑,因为我正在处理具有 777 的目录或 rwxrwxrwx权限,我可以使用 touch 轻松更改它们的修改时间在外壳中。

我错过了什么吗? Boost 要求的权限是否超过它需要的权限?有什么办法可以解决这个问题吗?

这是Boost中的相关代码:

handle_wrapper hw(
  create_file( ph.c_str(), FILE_WRITE_ATTRIBUTES,
    FILE_SHARE_DELETE | FILE_SHARE_READ | FILE_SHARE_WRITE, 0,
    OPEN_EXISTING, FILE_FLAG_BACKUP_SEMANTICS, 0 ) );
if ( hw.handle == INVALID_HANDLE_VALUE )
  return error_code( ::GetLastError(), system_category );
return error_code( ::SetFileTime( hw.handle, 0, 0, &last_write_time ) != 0
  ? 0 : ::GetLastError(), system_category );

最佳答案

我敢打赌 touch -r file directory 也会失败。这将使用 file 的时间戳而不是当前时间。

我找不到关于该行为的明确文档,但如果你们都设置了明确的时间并且不拥有您正在触摸的文件。

$ touch foo
$ touch bar
$ sudo chmod a+rw bar
$ sudo chown root.root bar
$ touch bar
# success
$ touch -r foo bar
touch: setting times of `bar': Operation not permitted

仔细想想也有道理。如果您对文件/目录具有写权限,则可以手动编辑以将修改时间更改为现在。但是将修改时间设置为其他时间需要所有权。

关于c++ - 成功执行boost::filesystem::last_write_time需要哪些权限?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10123346/

相关文章:

windows - 所有 Windows 用户都可以编辑的建议文件位置?

linux - vlad 部署者 - 使用不同的用户进行部署?

c++ - C++ 标准库如何保证避免数据竞争?

c++ - 使用 "near"作为变量名时出现编译器错误

c++ - 如何像junit一样使用cppunit——两条主线

linux - 使用 scons.py 添加配方的 Yocto do_package() 语法

Java 安全管理器

c# - 从 C++ 启动 C# 应用程序并在该应用程序上执行任务

linux - udev 规则多次运行 bash 脚本

linux - 检查包更新后文件是否会更改