相关函数:fstat, lstat, chmod, chown, readlink, utime

头文件:#include<sys/stat.h>  #include<uninstd.h>

定义函数:int stat(const char * file_name, struct stat *buf);

函数说明:stat()用来将参数file_name 所指的文件状态, 复制到参数buf 所指的结构中。

下面是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 缓冲区大小.
u nsigned 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 最近一次被更改的时间, 此参数会在文件所有者、组、 权限被更改时更新
};

先前所描述的st_mode 则定义了下列数种情况:

 、S_IFMT  文件类型的位遮罩
、S_IFSOCK scoket
、S_IFLNK 符号连接
、S_IFREG 一般文件
、S_IFBLK 区块装置
、S_IFDIR 目录
、S_IFCHR 字符装置
、S_IFIFO 先进先出
、S_ISUID 文件的 (set user-id on execution)位
、S_ISGID 文件的 (set group-id on execution)位
、S_ISVTX 文件的sticky 位
、S_IRUSR (S_IREAD) 文件所有者具可读取权限
、S_IWUSR (S_IWRITE) 文件所有者具可写入权限
、S_IXUSR (S_IEXEC) 文件所有者具可执行权限
、S_IRGRP 用户组具可读取权限
、S_IWGRP 用户组具可写入权限
、S_IXGRP 用户组具可执行权限
、S_IROTH 其他用户具可读取权限
、S_IWOTH 其他用户具可写入权限
、S_IXOTH 其他用户具可执行权限上述的文件类型在 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 来删除或改名.

返回值:执行成功则返回0,失败返回-1,错误代码存于errno。

错误代码:

 、ENOENT 参数file_name 指定的文件不存在
、ENOTDIR 路径中的目录存在但却非真正的目录
、ELOOP 欲打开的文件有过多符号连接问题, 上限为16 符号连接
、EFAULT 参数buf 为无效指针, 指向无法存在的内存空间
、EACCESS 存取文件时被拒绝
、ENOMEM 核心内存不足
、ENAMETOOLONG 参数file_name 的路径名称太长  
范例:
1 #include <sys/stat.h>
2 #include <unistd.h>
3 main() {
4 struct stat buf;
5 stat("/etc/passwd", &buf);
6 printf("/etc/passwd file size = %d \n", buf.st_size);
7 }
执行: /etc/passwd file size = 705

转载:http://wenku.baidu.com/link?url=FUroWFwmMxc3teZpYMTIxf3gOu-FsYe_NIER218D7XZOA5VgiLbSsvfVjrFtphpkM_TqTOvjORT2AqeabMGKHg-lhObBJiqjkAo3oHkYdQq

C语言stat()函数:获取文件状态的更多相关文章

  1. 第九篇:使用 lstat 函数获取文件信息

    前言 在之前的文章中,描述过如何用 fcntl 函数改变文件的状态标记.但,文件还有很多信息,如文件类型,权限设置,设备编号,访问时间等等.如果要获取这些信息,则使用函数 lstat 可以轻松达到这个 ...

  2. 使用 lstat 函数获取文件信息

    前言 在之前的文章中,描述过如何用 fcntl 函数改变文件的状态标记.但,文件还有很多信息,如文件类型,权限设置,设备编号,访问时间等等.如果要获取这些信息,则使用函数 lstat 可以轻松达到这个 ...

  3. python_如何获取文件状态

    案例: 在某项目中,需要获取文件状态,如: 文件的类型(普通文件.目录.符合连接.设备文件) 文件的访问权限 文件最后 访问.修改.节点状态 时间 普通文件大小 -- 如何解决? 方法1:通过os原始 ...

  4. fcntl 获取文件状态标志

    int fcntl(int fd,int cmd,...) 函数fcntl提供了非常丰富的功能.主要依赖于cmd的各种参数: 复制已有的文件描述符 F_DUPFD,F_DUPFD_CLOEXEC 获取 ...

  5. stat()函数--------------获取文件信息

    stat():用于获取文件的状态信息,使用时需要包含<sys/stat.h>头文件. 函数原型:int stat(const char *path, struct stat *buf): ...

  6. 关于finfo_file函数获取文件mime值验证出错的问题

    今天在做图片上传 验证图片mime值时 突然发现  个别特殊情况下finfo_file 获取的MIME值不能直接使用, 依照官方的写法是 $finfo=finfo_open(FILEINFO_MIME ...

  7. C语言time函数获取当前时间

    以前放了个链接,但是原作者把博文删了,这里放一个获取时间的代码,已经比较详细所以不做注释 #include<stdio.h> #include<time.h> #include ...

  8. 第七篇:使用 fcntl 函数 获取,设置文件的状态标志

    前言 当打开一个文件的时候,我们需要指定打开文件的模式( 只读,只写等 ).那么在程序中如何获取,修改这个文件的状态标志呢? 本文将告诉你如何用 fcntl函数 获取指定文件的状态标志. 解决思路 1 ...

  9. 使用 fcntl 函数 获取,设置文件的状态标志

    前言 当打开一个文件的时候,我们需要指定打开文件的模式( 只读,只写等 ).那么在程序中如何获取,修改这个文件的状态标志呢?本文将告诉你如何用 fcntl函数 获取指定文件的状态标志. 解决思路 1. ...

随机推荐

  1. Android 关于操作栏 ActionBar 的设计原则【转载+整理】

    原文地址 本文内容 操作栏目的 基本布局 适应旋转和不同的屏幕尺寸 副操作栏的布局 操作栏按钮 上下文操作栏 操作栏清单 设计原则就是为你在编写 Android APP 时,尤其是如何安排操作按钮的位 ...

  2. 看见上帝的 10 个公式……

    原文 Top Ten Greatest Equations Ever 本文内容 No.1 麦克斯韦方程组 No.2 欧拉方程 No.3 牛顿第二定律 No.4 毕达哥拉斯定理 No.5 薛定谔方程 N ...

  3. angularjs中的验证input输入框只能输入数字和小数点

    把js的验证方法改成angular可使用的方法 AngularJS文件的写法: $scope.clearNoNum = function(obj,attr){ //先把非数字的都替换掉,除了数字和.o ...

  4. Solidworks如何在零件表面贴图

    在要增加图片的表面上右击,然后选择修改这个面的颜色(可以是曲面)   切换到高级,然后选择一个图片   你可以缩放图片的大小,从而决定图片的重复次数   如果图片上下或者左右颠倒了,可以在映射里面勾选 ...

  5. Android MarsDaemon实现进程及Service常驻

    前段时间.就讨论过关于怎样让Service常驻于内存而不被杀死,最后的结论就是使用JNI实现守护进程,可是不得不说的是,在没有改动系统源代码的情况下,想真正实现杀不死服务,是一件非常难的事情.眼下除了 ...

  6. Springboot项目启动报错,提示Cannot determine embedded database driver class for database type NONE

    我在springboot项目里面引入了数据库的配置: <dependency> <groupId>org.mybatis.spring.boot</groupId> ...

  7. ES6 箭头函数(arrow function)

    例行声明:接下来的文字内容全部来自 Understanding ECMAScript 6,作者是Nicholas C.Zakas,也就是大名鼎鼎的Professional JavaScript for ...

  8. Unity3D for Mac 破解

    每次版本更新又忘记怎么搞了.干脆记下来! 1安装Unity 2安装成功后打开Applecation>Unity>Unity(右击显示包内容)>contents>MacOS 3用 ...

  9. jquery hasClass()、is()

    一..hasClass() hasClass()方法是用来检查被选择的元素是否包含指定的class名,其语法: $(selector).hasClass("className"); ...

  10. .net部署时常见问题

    站点提示“不允许的父路径”怎么办 error: 40 - Could not open a connection to SQL Server解决办法 无法识别的属性“targetFramework”. ...