要求:输入文件名,打印输出该文件初始的group和others权限,以及关闭写权限后的group和others权限
知识点:用stat函数来获取文件的访问权限,然后用chmod函数来关闭group的写权限和other的写权限。
修改权限函数: int chmod(const char * path,mode_t mode)
#include<sys/types.h>
#include<sys/stat.h>
函数说明 chmod()会依参数mode 权限来更改参数path 指定文件的权限。
mode &= ~S_IRGRP;chmod(“filename”, mode);
代码:
#include<stdio.h>
#include<stdlib.h>
#include<unistd.h>
#include<errno.h>
#include<sys/types.h>
#include<sys/stat.h>
int main(int argc,char *argv[])
{
struct stat buf;
int res;
if(argc!=2)
{
perror("参数不正确!正确格式:./main filename");
exit(1);
}
res=stat(argv[1],&buf);
if(res<0)
{
perror("stat error");
exit(1);
}
printf("初始文件 %s 的权限信息:\n",argv[1]);
//if(buf.st_mode&S_IRWXU) printf("user read write execute\n");
if(buf.st_mode&S_IRUSR) printf("user read \n");
if(buf.st_mode&S_IWUSR) printf("user write \n");
if(buf.st_mode&S_IXUSR) printf("user execute\n");
//if(buf.st_mode&S_IRWXG) printf("group read write execute\n");
if(buf.st_mode&S_IRGRP) printf("group read \n");
if(buf.st_mode&S_IWGRP) printf("group write\n");
if(buf.st_mode&S_IXGRP) printf("group execute\n");
//if(buf.st_mode&S_IRWXO) printf("other read write execute\n");
if(buf.st_mode&S_IROTH) printf("other read \n");
if(buf.st_mode&S_IWOTH) printf("other write\n");
if(buf.st_mode&S_IXOTH) printf("other execute\n");
buf.st_mode &=~S_IWGRP;
chmod(argv[1],buf.st_mode);
buf.st_mode &=~S_IWOTH;
chmod(argv[1],buf.st_mode);
printf("更改后文件 %s 的权限信息:\n",argv[1]);
if(buf.st_mode&S_IRUSR) printf("user read \n");
if(buf.st_mode&S_IWUSR) printf("user write \n");
if(buf.st_mode&S_IXUSR) printf("user execute\n");
if(buf.st_mode&S_IRGRP) printf("group read \n");
if(buf.st_mode&S_IWGRP) printf("group write\n");
if(buf.st_mode&S_IXGRP) printf("group execute\n");
if(buf.st_mode&S_IROTH) printf("other read \n");
if(buf.st_mode&S_IWOTH) printf("other write\n");
if(buf.st_mode&S_IXOTH) printf("other execute\n");
}