2014-03-28 12 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