这三个函数的功能是一致的,都用于获取文件相关信息,但应用于不同的文件对象。对于函数中给出pathname参数,stat函数返回与此命名文件有关的信息结构,fstat函数获取已在描述符fields上打开文件的有关信息,lstat函数类似于stat但是当命名的文件是一个符号链接时,lstat返回该符号链接的有关信息,而不是由该符号链接引用文件的信息。第二个参数buf是指针,它指向一个用于保存文件描述信息的结构,由函数填写结构内容。该结构的实际定义可能随实现有所不同.

用法:

#include

int stat(const char *path,

struct stat *buf);

int fstat(int filedes,

struct stat *buf);

int lstat(const char *path,

struct stat *buf);

参数:

path:文件路径名。

filedes:文件描述词。

buf:是以下结构体的指针

struct stat{

mode_t st_mode; //(文件保护模式)文件类型和权限信息 结构体详解请参考此处

ino_t st_ino; //文件结点号

dev_t st_dev; //文件所在设备的文件系统标识号 device number (file system)

dev_t st_rdev; //文件所表示的特殊设备文件的设备标识 device number for special

files

nlink_t st_nlink; //符号链接数

uid_t st_uid; //文件用户标识 用户ID

gid_t st_gid; //文件用户组标识 组ID

off_t st_size; // 总大小,字节为单位 size in bytes,for regular files

time_t st_st_atime; //文件内容最后访问的时间

time_t st_mtime; //文件内容最后修改时间

time_t st_ctime; //文件结构最后状态改变时间

blksize_t st_blksize; // 文件系统的最优I/O块大小 best I/O block size

blkcnt_t st_blocks; //分配给文件的块的数量,512字节为1单元 number of disk blocks

allocated

};

一个判断文件大小的例子:

代码1:

longget_file_size(

char * filename )

{

struct stat

f_stat;

if( stat( filename,

&f_stat ) == -1 ){

return

-1;

}

return

(long)f_stat.st_size;

}

代码2:

longget_file_size( char*

filename )

{

FILE* fp = fopen( filename, "r"

);

if (fp==NULL) return

-1;

fseek( fp, 0L, SEEK_END

);

return

ftell(fp);

}

文件类型:

普通文件,目录文件,块特殊文件,字符特殊文件,套接字,FIFO,符号链接.

文件类型信息包含在stat结构的st_mode成员中,可以用如下的宏确定文件类型,这些宏是stat结构中st_mode的成员.

S_ISREG();

S_ISDIR();

S_ISBLK();

S_ISCHR();

S_ISSOCK();

S_ISFIFO();

S_ISLNK();

返回说明:

成功执行时,返回0。失败返回-1,errno被设为以下的某个值

EBADF: 文件描述词无效

EFAULT: 地址空间不可访问

ELOOP: 遍历路径时遇到太多的符号连接

ENAMETOOLONG:文件路径名太长

ENOENT:路径名的部分组件不存在,或路径名是空字串

ENOMEM:内存不足

ENOTDIR:路径名的部分组件不是目录

示例:

#include int main(int argc,char* argv[])

{

int i;

struct stat buf;

char * ptr;

for(i=1;i

{

if(lstat(argv[i],&buf)<0)

{

perror(”错误原因是:”);

continue;

}

if (S_ISREG(buf.st_mode))

ptr=”普通文件”;

if (S_ISDIR(buf.st_mode))

ptr=”目录”;

//……and so on…

cout<

}

exit(0);

}

c语言中stat函数,C语言:stat,fstat和lstat函数相关推荐

  1. c语言中void arrout,c语言学习笔记(数组、函数

    <c语言学习笔记(数组.函数>由会员分享,可在线阅读,更多相关<c语言学习笔记(数组.函数(53页珍藏版)>请在人人文库网上搜索. 1.数组2010-3-29 22:40一维数 ...

  2. c语言中alloc作用,C语言内存分配 :malloc()函数与alloc()函数

    C语言跟内存分配方式 (1) 从静态存储区域分配.内存在程序编译的时候就已经分配好,这块内存在程序的整个运行期间都存在.例如全局变量,static变量. (2) 在栈上创建.在执行函数时,函数内局部变 ...

  3. c语言 格式转换函数,C语言中的格式转换函数.doc

    C语言中的格式转换函数 C语言中的格式转换函数 表头文件 #include 定义函数 double atof(const char *nptr); 函数说明 atof()会扫描参数nptr字符串,跳过 ...

  4. UNIX--stat、fstat和lstat函数

    2019独角兽企业重金招聘Python工程师标准>>> stat.fstat和lstat函数(UNIX) #include #include int stat(const char ...

  5. c语言中inline用法,C语言陷阱与技巧第2节,使用inline函数可以提升程序效率,但是让inline函数生效是有条件的...

    打开 Linux 内核源代码,会发现内核在定义C语言函数时,有很多都带有 "inline"关键字,请看下图,那么这个关键字有什么作用呢? inline 关键字的作用 在C语言程序开 ...

  6. c语言中void指针,C 语言 void指针

    C 语言 void指针 到目前为止,我们已经研究了分配给指针的地址应该与指针声明中指定的类型相同. 例如,如果我们声明了int指针,则此int指针不能指向float变量或某种其他类型的变量,即它只能指 ...

  7. html语言中%3c%%%3e中语言,[工学]C语言程序设计习题解答.doc

    [工学]C语言程序设计习题解答 C程序设计习题 第一章 C 语言基础知识 1.1 选择题 1. C语言源程序的基本单位是_____. A. 过程 B. 函数 C. 子程序 D. 标识符 2. 下列各组 ...

  8. c语言中.和-区别,c语言中-和.的区别

    对于c语言中"->"和"."的区别总结如下: 1.A.B则A为对象或者结构体: 2.A->B则A为指针,->是成员提取,A->B是提取A ...

  9. c语言中-1%3=,c语言数据类型.ppt

    c语言数据类型 C语言程序设计 贵州大学电气工程学院 测控技术与仪器教研室 王民慧 本章主要内容: 3.1 C的数据类型 基本类型 构造类型 指针类型 空类型 C语言中的数据类型如下所示: 一.常量与 ...

最新文章

  1. Nature微生物多样性驱动了细菌以CRISPR系统抵御噬菌体
  2. And it's over,And it's a new start
  3. Python 语言介绍
  4. 对c语言课程的心得体会,C语言课程设计心得体会
  5. mysql strcmp s1 s2_mysql常用函数
  6. c++ 请抛弃匈牙利命名法 - 变量命名代码风格的建议。
  7. ajax编写前台的时候,列表显示部分,表格显示不出来,但是可以获取到数据
  8. 完整解决Flash载入中文FLASH乱码问题
  9. [转载] 包含对象的json格式_如何把JSON数据格式转换为Python的类对象?
  10. Django之HttpRequest和HttpReponse
  11. win开启审计功能_一项一项教你测等保2.0——Linux安全审计
  12. Linux安装jdk详细步骤
  13. 什么是等保三级?基本流程是什么样的?
  14. 红旗linux桌面版_瑞星ESM杀毒软件For Linux获红旗兼容性认证
  15. 微信小程序模拟器所有页面都无法跳转
  16. gb和gib的区别_内存 G和GB有什么区别
  17. av_rescale_rnd计算原理
  18. python输出二进制数_Python计算二进制数及输出补码
  19. auto.js 基于控件的操作
  20. 独立站运营 | 聊天聚合部件,助你提升100%私域转化率

热门文章

  1. Missing return statement
  2. [转载]亲历:探访乔布斯的低调豪宅(组图38)
  3. 十分钟读懂Beam Search(1/2)
  4. Callback回调函数介绍(C语言)
  5. 如何找基址,原理是什么
  6. 行转列方法 及 pivot函数使用问题
  7. NVIDIA公布2019财年财报,营收大幅下跌,利润腰斩...
  8. 60w的数据产品经理面试考什么?(二)
  9. html爱情表白神器,回忆纪念册(附源码)
  10. 全国各省电信及网通DNS列表