我正在编写一个需要能够设置文件权限的程序,但无论出于何种原因,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);
答案 0 :(得分:3)
UNIX文件系统权限是八进制基础而不是十进制基数。因此,将其乘以100
和10
会给您带来意想不到的结果。
答案 1 :(得分:2)
权限以八进制形式报告,因此{C}中的600
实际上是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);