使用 open() 或 creat() 创建文件的权限位设置比我要求的要少

2023-12-04

我正在编写一个程序来模仿 cp 实用程序。但是,我无法获得文件权限以正常工作。我知道它们存储在结构中stat并存储在st_mode场与stat.

我的问题是我没有获得组或其他类别的写入权限,即我得到-rwxr-xr-x作为文件的权限,即使源文件是-rwxrwxrwx。我设置权限的语句如下。

if ( (dest_fd = open(dest_file, O_WRONLY|O_CREAT, (stats.st_mode & S_IRUSR)|(stats.st_mode & S_IWUSR)|(stats.st_mode & S_IXUSR)|(stats.st_mode & S_IRGRP)|(stats.st_mode & S_IWGRP)|(stats.st_mode & S_IXGRP)|(stats.st_mode & S_IROTH)|(stats.st_mode & S_IWOTH)| (stats.st_mode & S_IXOTH))) < 0)
    {
            printf("There was a problem opening the destination file.");
            exit(EXIT_FAILURE);
    }//ends the if statement opening the destination file.

到目前为止的答案都是正确的,问题是umask,而不是清除umask(如果您的程序是多线程的或者您可能正在调用任何创建文件的库函数,这很危险)我会对待umask作为用户配置变量,您不允许修改,而是调用fchmod在创建文件后对其进行操作,以授予它们您想要的最终权限。无论如何,这对于授予某些权限(例如 suid/sgid)可能是必要的,每当文件被修改时,某些内核就会删除这些权限。我最初也会使用模式创建文件0600,这样打开它和更改权限之间就不存在竞争条件,在此期间其他用户可以获得该文件的打开句柄。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 open() 或 creat() 创建文件的权限位设置比我要求的要少 的相关文章

随机推荐

  • 为什么我的对象打印了两次?

    当我在 irb 或 Rails 中时 我使用以下命令创建一些迭代each 我在终端或浏览器中再次打印整个结构 例子 a 1 2 3 4 a each do number puts n end irb 终端或浏览器中的结果 1 2 3 4 g
  • 调用 object.method() 和 Class.method(object) 时幕后发生了什么?

    我对 Python 还很陌生 正在处理 OOP 我对何时使用对方法和类的调用有点困惑 下面的示例代码输出平均值 但是我很好奇什么时候从类调用与从现实世界的角度使用方法调用 我很确定这只是我可能尚未解决的问题 但对于何时使用其中一个而不是另一
  • 最小购物车金额(WooCommerce 中的几种特定产品除外)

    我正在使用以下代码 Woocommerce 中除特定产品外的最低购物车金额 在我的 php 中 允许覆盖 Woocommerce 最低购物车价值 130 美元 工作正常 但仅适用于一种定义的产品 在这种情况下product id 2649
  • 在 Firebase 中过滤多个子属性的产品

    我最近询问如何根据产品的子属性过滤产品 请参阅 根据 Firebase 中的子项过滤产品 回顾一下我的结构如下 products product1 author 12345 title Awesome category catA descr
  • 如何正确关闭和打开 Hibernate 会话?

    我有以下方法 每隔几秒插入一大批记录 运行一段时间后 我收到如下错误 错误 通信链路故障 从服务器成功接收到的最后一个数据包是 523 毫秒前 最后一个成功发送到服务器的数据包是 8 毫秒前 2013 年 5 月 16 日上午 9 48 3
  • Doctrine2 最佳实践,实体应该使用服务吗?

    我不久前问过类似的问题 使用数据映射器模式 实体 域对象 是否应该了解映射器 然而 它是通用的 并且我对如何使用 Doctrine2 完成一些事情非常感兴趣 这是一个简单的示例模型 每个Thing可以有一个Vote from a User
  • 如何仅在脚本运行期间设置环境变量?

    在 Linux 上 乌班图11 04 Natty Narwhal 在 Bash 中 是否可以临时设置一个仅在脚本运行期间与普通变量不同的环境变量 例如 在 shell 脚本中 通过将 HOME 临时设置为当前工作目录中的文件夹 然后启动该应
  • Xampp 1.7.4 和 PHP 5.3.5(已弃用的警告)

    我刚刚将 Xampp 安装升级到 1 7 4 我有一个工作脚本 jquery 调用 PHP 脚本并显示返回值 升级后 我的 jquery 正确获取了结果 但除了结果之外 还返回了一些警告 因此停止我的脚本以显示结果 我签入了 firebug
  • 如何向 POI 4.0.1 中的 XDDFChart 添加带有第二轴的第二条线?

    我无法在现有图表的第二个轴 右轴 上添加线条 有没有办法通过 POI 4 0 0 1 中图表的新实现来做到这一点 Desired output will look like this A simple excel chart with 2
  • 如何将多个 OpenAPI 3 规范文件组合在一起?

    我想合并使用 OpenAPI 3 规范编写的 API 规范 该规范当前分为多个文件 这些文件相互引用 ref 我怎样才能做到这一点 我最近写了一个快速工具来做到这一点 我称之为 openapi merge 有一个库和一个关联的 CLI 工具
  • 无法在 google cloud ml 上进行预测,而相同的模型正在本地计算机上运行

    我正在尝试使用谷歌云中的张量流库训练机器学习模型 创建存储桶后 我可以在云中训练模型 当我尝试使用现有模型进行预测时 我遇到了这个问题 代码和数据可以在以下 Github 目录中找到 https github com terminator1
  • 使用 createdesktop api 创建桌面的屏幕截图

    我正在使用 createdesktop api 创建桌面 我想截取屏幕截图或发送输入鼠标 键盘而不向用户显示桌面 有关如何实现此功能的任何想法 我发现的简短答案是你不能 您无法拍摄非活动桌面的屏幕截图 因为没有绘画调用 因为没有可见的窗口可
  • \s 在 C++ 正则表达式中不起作用

    我昨天开始学习正则表达式 在学习时 我看到 s 用于空白字符 但是 由于某种原因 每当我输入空格时 C 中都不会检测到它 Code include
  • 使用维恩图来描述表为集合的 SQL 连接是否合适?

    网上搜索SQL join可以找到下图 我们可以将其解释为维恩图 通过以下方式 标记为表 A 的圆圈是表 A 中的记录集 标记为表 B 的圆圈是表 B 中的记录集 集合的交集表示内连接 也称为 SQL 中的连接 动机 所示的图表在网络上以各种
  • 如何计算mysql中唯一的列值

    这是我的数据 cardNo userName tablename hours date 1 a a 12 12 06 2015 1 a a 5 11 06 2015 2 b b 3 15 06 2015 1 a a 8 12 06 2015
  • 如何在 angularjs 下拉元素上正确使用 ng-change ?

    我的模板中有这个下拉列表 div class col lg 5 col md 5 col sm 5 col xs 5 div class input group input group sm div div
  • dd-mm-yyyy hh:mm 的正则表达式

    我想查看日期dd mm yyyy hh mm格式 现在我正在使用 0 1 9 1 d 2 d 3 01 0 1 9 1 d 2 d 3 01 19 20 d 2 匹配日期的正则表达式dd mm yyyy format 但我想检查一下dd m
  • 桌面快捷方式的位置存储在哪里?

    Windows桌面快捷方式的位置存储在哪里 我问的是屏幕职位图标的一部分 而不是实际的图标本身 我知道图标本身存储在各种 DLL EXE 等中 这些位置显然存储在某些非易失性存储中 因为它们在重新启动时仍然存在 我的最终目标是编写一个应用程
  • 阻止滚动函数多次触发?

    所以我有一个脚本 可以从数据库中提取数据并在用户接近页面底部时显示它 问题 当用户到达底部时 脚本应该只返回一个帖子 但实际上 正在发出多个请求 导致所有帖子都被快速从数据库中提取 这反过来又以错误的方式返回它们命令 我的问题是 有没有人知
  • 使用 open() 或 creat() 创建文件的权限位设置比我要求的要少

    我正在编写一个程序来模仿 cp 实用程序 但是 我无法获得文件权限以正常工作 我知道它们存储在结构中stat并存储在st mode场与stat 我的问题是我没有获得组或其他类别的写入权限 即我得到 rwxr xr x作为文件的权限 即使源文