2014-01-15 87 views
3

我想在C程序搭配chmod不能給所有權限

chmod("/tmp/toBoard", S_IRWXU | S_IRWXG | S_IRWXO); 

但程序運行後,我檢查權限使用chmod功能來更改文件權限並只獲得

-rwxr-xr-x 1 root root 

我運行這個程序在Linux嵌入式板上。 toBoard是來自/ var目錄中其他文件的copied inside the program文件,源文件具有所有權限(從終端手動設置)。當我試圖手動複製它,並設置它的工作權限,但是當我複製的文件,並嘗試給它的所有權限 - 失敗沒有錯誤

copy("/var/www/defaults.dat", "/tmp/toBoard"); 
int err; 
if(err = chmod("/tmp/toBoard", S_IRWXU | S_IRWXG | S_IRWXO)){ 
    perror("chmod"); 
} 
struct stat buffer; 
int status = stat("/tmp/toBoard", &buffer); 

如何設置的所有權限綠燈?

+2

您必須將其作爲所有者運行,在本例中爲root。但是除非你真的必須這樣做,否則你不應該使用root,當然也不要這樣做。 – Kevin

+0

這工作正如我所見。必須'#include ''得到S_IRWXU等常數 – Vorsprung

+0

以root身份運行。我需要這個能夠從網頁重寫這個文件,但它沒有權限。 Vorsprung,包含了所有需要的常量,你試過了你的建議,它也沒有幫助 – PaulPonomarev

回答

7

就目前而言,您的調用是正確的,但可能會失敗,並且您沒有檢查返回的代碼。你可以嘗試:

if (chmod("/tmp/toBoard", S_IRWXU | S_IRWXG | S_IRWXO)) { 
    perror("chmod"); 
    /* more error handling. */ 
} 

在這種情況下,它可能是「權限被拒絕」的情況。

+0

完成那樣 - 沒有錯誤 – PaulPonomarev

+0

@PaulPonomarev'/ tmp /'是以一種有趣的方式掛載的嗎?如果你嘗試一個不同的文件會發生什麼? – cnicutar

+0

我編輯了主要問題來回答你的問題。/tmp是電路板上的一個文件夾,在重啓後清空 – PaulPonomarev