[英]C - Calling chmod function causes unexpected results
我正在編寫一個需要能夠設置文件許可權的程序,但是由於任何原因,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);
UNIX文件系統權限是八進制的,而不是十進制的。 因此,將其乘以100
和10
會得到意想不到的結果。
權限記錄在八進制所以600
實際上是在0600
在C(或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);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.