【问题标题】:C - Calling chmod function causes unexpected resultsC - 调用 chmod 函数会导致意外结果
【发布时间】:2013-03-04 01:40:02
【问题描述】:

我正在编写一个需要能够设置文件权限的程序,但无论出于何种原因,chmod 的行为都不像我期望的那样。对于几个测试,我尝试创建两个不同的文件(fileOne.txt 和 fileTwo.txt)。 fileOne.txt 的权限应该设置为 600,而 fileTwo.txt 的权限应该设置为 777。

运行我的程序会产生以下结果:

fileOne.txt having permissions set to ---x-wx--T
fileTwo.txt having permissions set to -r----x--t

??什么?

下面是我的代码。我的 printf 的结果和预期的一样,(600, 777),那 chmod 为什么不这样呢?

printf("chmod = %d\n", (int)getHeader.p_owner * 100 + (int)getHeader.p_group * 10 + (int)getHeader.p_world);
chmod(getHeader.file_name, (int)getHeader.p_owner * 100 + (int)getHeader.p_group * 10 + (int)getHeader.p_world);

【问题讨论】:

    标签: c chmod


    【解决方案1】:

    UNIX 文件系统权限是八进制而不是十进制。所以将它乘以10010 会得到意想不到的结果。

    【讨论】:

      【解决方案2】:

      权限以八进制报告,因此 600 实际上是 C 中的 0600(或十进制的 384)。

      因此代码应该是:

      printf("chmod = %d\n", (int)getHeader.p_owner * 100 + (int)getHeader.p_group * 10 + (int)getHeader.p_world);
      chmod(getHeader.file_name, (int)getHeader.p_owner * 0100 + (int)getHeader.p_group * 010 + (int)getHeader.p_world);
      

      【讨论】:

      • 做到了。我以前从来不需要使用八进制,所以谢谢你提供一个例子。
      猜你喜欢
      • 1970-01-01
      • 2021-12-20
      • 1970-01-01
      • 2019-08-25
      • 2018-05-16
      • 2021-04-24
      • 2021-06-05
      • 1970-01-01
      • 2014-09-04
      相关资源
      最近更新 更多