• linux获取文件的属性


    目录

    一、获取文件的属性

    二、通过用户ID获取用户信息

    三、通过组的ID获取组的信息

    四、目录的属性


    一、获取文件的属性

             #include
            #include
            #include

           int stat(const char *pathname, struct stat *statbuf);//如果文件的属性为符号链接文件,则返回目标文件的信息
           int fstat(int fd, struct stat *statbuf);
           //需要先打开文件得到文件描述符才可以使用
           int lstat(const char *pathname, struct stat *statbuf);
           如果文件的属性为符号链接文件,则返回链接文件的信息
            三个函数的返回值:成功返回0,失败返回-1并返回 错误码
            
            struct stat {
                   dev_t     st_dev;         /* ID of device containing file */    设备文件
                   ino_t     st_ino;         /* Inode number */        inode码
                   mode_t    st_mode;        /* File type and mode */文件的类型和权限
                   nlink_t   st_nlink;       /* Number of hard links */硬链接数
                   uid_t     st_uid;         /* User ID of owner */文件拥有者的ID
                   gid_t     st_gid;         /* Group ID of owner */文件所属组的ID
                   dev_t     st_rdev;        /* Device ID (if special file) */设备号
                   off_t     st_size;        /* Total size, in bytes */文件大小
                   blksize_t st_blksize;     /* Block size for filesystem I/O */块大小
                   blkcnt_t  st_blocks;      /* Number of 512B blocks allocated */块数
                    struct timespec st_atim;  /* Time of last access */
                   struct timespec st_mtim;  /* Time of last modification */
                   struct timespec st_ctim;  /* Time of last status change */

               #define st_atime st_atim.tv_sec      /* Backward compatibility */最后访问时间
               #define st_mtime st_mtim.tv_sec        最后修改时间
               #define st_ctime st_ctim.tv_sec        文件状态最后修改时间
               };
            

    二、通过用户ID获取用户信息


            #include
            #include
            struct passwd *getpwuid(uid_t uid);
             struct passwd {
                   char   *pw_name;       /* username */
                   char   *pw_passwd;     /* user password */
                   uid_t   pw_uid;        /* user ID */
                   gid_t   pw_gid;        /* group ID */
                   char   *pw_gecos;      /* user information */
                   char   *pw_dir;        /* home directory */
                   char   *pw_shell;      /* shell program */
               };
               

    三、通过组的ID获取组的信息


            #include
            #include
            struct group *getgrgid(gid_t gid);
                      struct group {
                   char   *gr_name;        /* group name */
                   char   *gr_passwd;      /* group password */
                   gid_t   gr_gid;         /* group ID */
                   char  **gr_mem;         /* NULL-terminated array of pointers
                                              to names of group members */
               };
    目录文件(directory file) 这种文件包含了其他文件的名字以及指向与这些文件有关信息的指针。对一
    个目录文件具有读许可权的任一进程都可以读该目录的内容,但只有内核可以写目录文件。

    普通文件(regular file) 这是最常见的文件类型,这种文件包含了某种形式的数据。至于这种数据是文
    本还是二进制数据对于内核而言并无区别。对普通文件内容的解释由处理该文件的应用程序进行。

    字符特殊文件(character special file) 这种文件用于系统中某些类型的设备。

    块特殊文件(block special file) 这种文件典型地用于磁盘设备。系统中的所有设备或者是字符特殊文
    件,或者是块特殊文件。

    FIFO 这种文件用于进程间的通信,有时也将其称为命名管道。

    套接口(socket) 这种文件用于进程间的网络通信。套接口也可用于在一台宿主机上的进程之间的非网
    络通信。第1 5 章将用套接口进行进程间的通信。

    符号连接(symbolic link) 这种文件指向另一个文件。

    四、目录的属性


            1>打开目录
            #include
            #include
           DIR *opendir(const char *name);
        功能:
                打开目录
        参数:    
                要打开目录的名称
        返回值:
                成功返回DIR指针
                失败返回NULL,并返回报错码
                
                
            2>读取一个目录
           #include
           struct dirent *readdir(DIR *dirp);
           参数:
                    opendir返回的指针
           返回值:    成功返回读取的结构体数据
                    失败返回0,并返回错误码
          struct dirent {
                   ino_t          d_ino;       /* Inode number */    索引码
                   off_t          d_off;       /* Not an offset; see below */在目录文件中的偏移
                   unsigned short d_reclen;    /* Length of this record */    文件名的长度
                   unsigned char  d_type;      /* Type of file; not supported    文件类型
                                                  by all filesystem types */
                   char           d_name[256]; /* Null-terminated filename */    文件名
               };
               
               
             3>关闭目录
             closedir
            #include
           #include
           int closedir(DIR *dirp);
           功能:
                    关闭目录
           参数:
                    opendir返回的指针
           返回值:
                    成功返回:0
                    失败返回-1,并返回报错码

  • 相关阅读:
    工程项目管理系统的Java实现:高效协同与信息共享
    mysql Lock wait timeout exceeded; try restarting transaction解决方案
    安全错误攻击
    Java从入门到精通-数组(一)
    机器学习笔记之线性回归
    基于FPGA的频率计与串口通信(一)
    配置Mysql与注册登录模块
    贪心算法--看电视
    FPGA/HDL 开发的 10 条规则
    3k star 项目 learning-cmake 点评
  • 原文地址:https://blog.csdn.net/qq_54075859/article/details/126611645