2014-03-28 60 views
2

我環顧這個網站和其他人,並找不到我可能的基本問題的答案。我在AIX工作,正在嘗試學習系統編程。史蒂文斯的書在這一點上有點多,我還沒有找到一本好的「實用」系統編程書。在Unix中使用fchmod

這就是說,我試圖用C編寫一個程序,它基本上做了一個腳本(我稱之爲「治癒」)的一段時間後寫的。這裏是非常簡單的腳本(在這個階段,我不會將用戶/組/其他人的權限更改爲完整 - 我以爲我會碰到下一個障礙;儘管如此,最簡單的方法的建議是受歡迎的):

## cure: changes permissions on all arguments to 777 

sudo chmod 777 $* 

現在,這裏是我的cure.c代碼:

#include <sys/stat.h> 
#include <fcntl.h> 
#include <stdio.h> 
#include <stdlib.h> 

int main(int argc, char **argv) 
{ 
     int i, *fd; 
     //FILE *fd; 
     if(argc == 1) 
       printf("Usage: cure file1 file2 ...\n"); 

     for(i = 1 ; i < argc ; i++) 
     { 
       fd = fopen(argv[i], "rw"); 
       if(!fd) 
         printf("Cannot open %s\n", argv[i]); 
       fchmod(fd, S_IXUSR); 
       close(fd); 
     } 
     exit(0); 
} 

我已經做了一些調整,試圖讓程序工作。目前的情況是,這裏是GCC打印警告消息:

cure.c:在函數「主」:cure.c:默認情況下啓用分配從 兼容的指針類型:15:6:警告] cure.c:18:3:警告: 傳遞'fchmod'的參數1使指針變爲無指針的整數 cast [默認啓用] /usr/include/sys/stat.h:330:13:note: 預期'int',但參數類型爲'int *'cure.c:19:3:warning: 傳遞'close'的參數1使指針中的整數不帶 cast [缺省情況下啓用]/usr/include/unistd .h:142:12:note:expected 'int'but argument is of type'int *」

如果我改變我的FD變量到非定點INT,這就是我得到:

cure.c:在函數 '主':cure.c:15: 6:警告:賦值時將指針 整數沒有施放[默認啓用]

再次,我意識到這是很基本的,所以有一些我沒有收到尚未概念。

由於

回答

4

fopen返回FILE *,這是一個C流抽象。您可以使用它像這樣:

FILE *f = fopen(...); 

open返回一個整數的文件描述符,你可以用它像這樣:

int fd = open(...); 

他們不同的功能,不同的類型,和你把它們混合起來。

由於fchmod取整數的文件描述符,你想使用的功能的基本open/close /整數文件描述符家庭,fopen/fclose/FILE*家庭的功能。

+0

非常感謝先生!我會投票給你,但我還太低。 – BWONG

+0

沒問題!如果這能解決你的問題,即使你還沒有投票,你也應該能夠接受它。 – Useless

+0

終於得到代表upvote你。再次感謝! – BWONG