我环顾这个网站和其他人,并找不到我可能的基本问题的答案。我在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:警告:赋值时将指针 整数没有施放[默认启用]
再次,我意识到这是很基本的,所以有一些我没有收到尚未概念。
由于
非常感谢先生!我会投票给你,但我还太低。 – BWONG
没问题!如果这能解决你的问题,即使你还没有投票,你也应该能够接受它。 – Useless
终于得到代表upvote你。再次感谢! – BWONG