实验三
编写程序实现以下功能:
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;
    
}

Logo

更多推荐