Linux高级编程——实验三 编写程序实现以下功能: 1.输入文件名称,能够判断文件类型,判断实际用户对该文件具有哪些存取权限; 2.要求打印出文件类型信息,inode节点编号,链接数目,用户id,组
实验三编写程序实现以下功能:1.输入文件名称,能够判断文件类型,判断实际用户对该文件具有哪些存取权限;2.要求打印出文件类型信息,inode节点编号,链接数目,用户id,组id,文件大小信息;3.修改文件的权限为当前用户读写,组内用户读写,组外用户无权限。代码如下:#include<stdio.h>#include<stdlib.h>#include&l...
实验三
编写程序实现以下功能:
1.输入文件名称,能够判断文件类型,判断实际用户对该文件具有哪些存取权限;
2.要求打印出文件类型信息,inode节点编号,链接数目,用户id,组id,文件大小信息;
3.修改文件的权限为当前用户读写,组内用户读写,组外用户无权限。
代码如下:
#include<stdio.h>
#include<stdlib.h>
#include<errno.h>
#include<fcntl.h>
#include<string.h>
#include<sys/stat.h>
#include<sys/types.h>
#include<unistd.h>
int main(int argc,char *argv[])
{
struct stat statBuf;
char *ptr;
int i;
for(i=0;i<argc;i++)
{
if(lstat(argv[i],&statBuf)<0)
perror("latat:");
if(S_ISREG(statBuf.st_mode))
ptr="regular file\n";
else if (S_ISDIR(statBuf.st_mode))
ptr="directory file\n";
else if(S_ISCHR(statBuf.st_mode))
ptr="char device file\n";
else if(S_ISBLK(statBuf.st_mode))
ptr="block device file\n";
else if(S_ISFIFO(statBuf.st_mode))
ptr="fifo file\n";
else if(S_ISLNK(statBuf.st_mode))
ptr="symbolic link\n";
else if(S_ISSOCK(statBuf.st_mode));
ptr="socket file\n";
printf("%s is %s\n",argv[i],ptr);
}
for(i=0;i<argc;i++)
{
if(access(argv[i],F_OK)<0)
perror("file inexistence");
else
{
if(access(argv[i],R_OK)<0)
perror("access R_OK\n");
else
printf("user can read %s\n",argv[i]);
if(access(argv[i],W_OK)<0)
perror("access W_OK\n");
else
printf("user can write\n");
if(access(argv[i],X_OK)<0)
perror("access X_OK\n");
else
printf("user can executable\n");
}
}
for(i=0;i<argc;i++)
{
if(lstat(argv[i],&statBuf)<0)
perror("lstat");
if(S_ISREG(statBuf.st_mode))
ptr="regular file\n";
else
ptr="not regular file\n";
printf("%s is %s\n",argv[i],ptr);
printf("inode is %ld\n",statBuf.st_ino);
printf("linknum is %ld\n",statBuf.st_nlink);
printf("uid is %ld\n",statBuf.st_uid);
printf("gid id %ld\n",statBuf.st_gid);
printf("size is %d\n",statBuf.st_size);
}
for(i=0;i<argc;i++)
{
if(chmod(argv[i],0660)<0)
printf("chmod error for bar");
}
return 0;
}
更多推荐
所有评论(0)