C - 调用chmod函数会导致意外结果

时间:2013-03-04 01:40:02

标签: c chmod

我正在编写一个需要能够设置文件权限的程序,但无论出于何种原因,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);

2 个答案:

答案 0 :(得分:3)

UNIX文件系统权限是八进制基础而不是十进制基数。因此,将其乘以10010会给您带来意想不到的结果。

答案 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);