ntko文件存取错误_如何查看电脑里的文件信息?C语言lstat函数【知识点】

286676f6ab0f9422232f2a7bbd72da95.png

图控大叔

构图传递思想

阅读从未如此简单!!!

01

前言

       推文模式更改说明:为了避免单篇推文内容过长,图控大叔将尝试将测试代码与知识点部分进行分离的方式呈现,即使用两篇推文来完成内容呈现,一篇推文用于进行知识点呈现,另一篇用来承载代码。另外,在推文标题命名上尽量做到仅有【代码】二字的差别,以方便读者查找,望读者知晓!

       在编程过程中,如果涉及到文件的操作,那么可能会涉及到对文件的类型、大小及使用权限等相关的判断,那么今天就分享这块所用到的函数,具体内容如下。

02

内容目录

2-1 lstat函数及其兄弟函数
2-2 参数所涉及结构体
2-3 函数判断及拓展
2-4 代码链接

2-1

lstat函数及其兄弟函数

dcc0e83f966f57c034a4354f508cde24.giflstat
头文件#include #include 
lstat (由文件描述符取得文件状态)int lstat (const char * file_name, struct stat * buf);
函数说明
  lstat()与 stat()作用完全相同, 都是取得参数 file_name 所指的文件状态,
  其差别在于, 当文件为符号连接时, lstat()会返回该 link 本身的状态.
返回值
  执行成功则返回 0,
  失败返回-1,
  错误代码存于errno.
dcc0e83f966f57c034a4354f508cde24.giffstat
头文件与lstat相同fstat (由文件描述符取得文件状态)int fstat(int fildes, struct stat *buf);
函数说明fstat()用来将参数fildes所指的文件状态,
    复制到参数buf所指的结构中(struct stat).fstat()与stat()作用完全相同,
    不同处在于传入的参数为已打开的文件描述符.
返回值
  执行成功则返回 0,
  失败返回-1,
  错误代码存于 errno.
dcc0e83f966f57c034a4354f508cde24.gifstat
头文件与lstat相同
stat (取得文件状态)int stat(const char * file_name, struct stat *buf);
函数说明
    stat()用来将参数 file_name 所指的文件状态,
    复制到参数 buf 所指的结构中.
返回值
  执行成功则返回 0,
  失败返回-1,
  错误代码存于 errno
错误代码
   ENOENT 参数 file_name 指定的文件不存在
   ENOTDIR 路径中的目录存在但却非真正的目录
   ELOOP 欲打开的文件有过多符号连接问题, 上限为 16 符号连接
   EFAULT 参数 buf 为无效指针, 指向无法存在的内存空间
   EACCESS 存取文件时被拒绝
   ENOMEM 核心内存不足
   ENAMETOOLONG 参数 file_name 的路径名称太长

2-2

参数所涉及结构体

下面是 struct stat 内各参数的说明struct stat 
 { 
   dev_t st_dev;                 //device 文件的设备编号
          
   ino_t st_ino;                //inode 文件的 i-node
   
   mode_t st_mode;              //protection 文件的类型和存取的权限
   
   nlink_t st_nlink;            //number of hard links
                                //连到该文件的硬连接数目, 刚建立的文件值为 1.
   
   uid_t st_uid;               //user ID of owner 文件所有者的用户识别码
   
   gid_t st_gid;               //group ID of owner 文件所有者的组识别码
   
   dev_t st_rdev;              //device type 若此文件为装置设备文件, 则为其设备编号
   
   off_t st_size;              //total size, in bytes 文件大小, 以字节计算
    
   unsigned long st_blksize;  //blocksize for filesystem I/O 文件系统的I/O 缓冲区大小
                
   unsigned long st_blocks;   //number of blocks allocated
                              //占用文件区块的个数, 每一区块大小为 512 个字节.
   
   time_t st_atime;           //time of lastaccess 文件最近一次被存取或被执行的时间,
                              //一般只有在用 mknod、utime、read、write 与 tructate 时改变.
            
   time_t st_mtime;          //time of last modification 文件最后一次被修改的时间,
                              //一般只有在用 mknod、utime 和 write 时才会改变
            
   time_t st_ctime;          //time of last change i-node 最近一次被更改的时间,
                             //此参数会在文件所有者、组、权限被更改时更新
 };

2-3

函数判断及拓展

7d3f0c586af61e7c5843c1b37c085a91.png

先前所描述的 st_mode 则定义了下列数种情况S_IFMT 0170000 文件类型的位遮罩S_IFSOCK 0140000 scoket S_IFLNK 0120000 符号连接S_IFREG 0100000 一般文件S_IFBLK 0060000 区块装置S_IFDIR 0040000 目录S_IFCHR 0020000 字符装置S_IFIFO 0010000 先进先出S_ISUID 04000 文件的 (set user-id on execution)位S_ISGID 02000 文件的 (set group-id on execution)位S_ISVTX 01000 文件的 sticky 位S_IRUSR (S_IREAD) 00400 文件所有者具可读取权限S_IWUSR (S_IWRITE)00200 文件所有者具可写入权限S_IXUSR (S_IEXEC) 00100 文件所有者具可执行权限
 
 S_IRGRP 00040 用户组具可读取权限S_IWGRP 00020 用户组具可写入权限S_IXGRP 00010 用户组具可执行权限S_IROTH 00004 其他用户具可读取权限S_IWOTH 00002 其他用户具可写入权限S_IXOTH 00001 其他用户具可执行权限 上述的文件类型在 POSIX 中定义了检查这些类型的宏定义S_ISLNK (st_mode) 判断是否为符号连接S_ISREG (st_mode) 是否为一般文件S_ISDIR (st_mode) 是否为目录S_ISCHR (st_mode) 是否为字符装置文件S_ISBLK (s3e) 是否为先进先出S_ISSOCK (st_mode) 是否为 socket 若一目录具有 sticky 位 (S_ISVTX),
          则表示在此目录下的文件只能被该文件所有者、此目录所有者或 root 来删除或改名.

2-4

代码链接

如何查看电脑里的文件信息?C语言lstat函数【代码】

03

结尾

       本次内容就分享到这里!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值