linux c文件属性,【linux c learn 之stat】获取文件的属性

NAME

stat 获取文件属性

这个函数位于头文件里

函数原型:

int stat(const char *path, struct stat *buf);

參数:

path  文件路径+文件名称

buf     指向buffer的指针

返回值:

-1   遇到错误

0    成功返回

函数作用:

把path文件的信息拷贝到指针buf所指的结构体中。

描写叙述

stat结构体:

struct stat {

dev_t st_dev; /* ID of device containing file */

ino_t st_ino; /* inode number */

mode_t st_mode; /* protection */

nlink_t st_nlink; /* number of hard links */

uid_t st_uid; /* user ID of owner */

gid_t st_gid; /* group ID of owner */

dev_t st_rdev; /* device ID (if special file) */

off_t st_size; /* total size, in bytes */

blksize_t st_blksize; /* blocksize for filesystem I/O */

blkcnt_t st_blocks; /* number of 512B blocks allocated */

time_t st_atime; /* time of last access */

time_t st_mtime; /* time of last modification */

time_t st_ctime; /* time of last status change */

};

dev_t包括设备文件的ID

st_inoi结点

st_mode文件类型和许可权限

st_nline文件链接数

st_uid用户全部者的ID

st_gid所属组的ID

st_rdev设备ID(假设指定文件)

st_size 所占的字节数

st_blksize文件系统I/O块大小

st_block分配的512B大小的

st_atime最后訪问时间

st_mtime最后改动时间

st_ctime状态最后改变时间

以下的POSIX宏定义用于核对st_mode域的文件类型

S_ISREG(m) 是常规文件?

S_ISDIR(m) 文件夹?

S_ISCHR(m) 字符设备?

S_ISBLK(m) 块设备?

S_ISFIFO(m) FIFO?

S_ISLNK(m) 符号链接? (Not in POSIX.1-1996.)

S_ISSOCK(m) 套接字? (Not in POSIX.1-1996.)

以下的标志用于st_mode域:

S_IFMT 0170000 bit mask for the file type bit fields

S_IFSOCK 0140000 socket

S_IFLNK 0120000 symbolic link

S_IFREG 0100000 regular file

S_IFBLK 0060000 block device

S_IFDIR 0040000 directory

S_IFCHR 0020000 character device

S_IFIFO 0010000 FIFO

S_ISUID 0004000 set-user-ID bit

S_ISGID 0002000 set-group-ID bit (see below)

S_ISVTX 0001000 sticky bit (see below)

S_IRWXU 00700 mask for file owner permissions

S_IRUSR 00400 owner has read permission

S_IWUSR 00200 owner has write permission

S_IXUSR 00100 owner has execute permission

S_IRWXG 00070 mask for group permissions

S_IRGRP 00040 group has read permission

S_IWGRP 00020 group has write permission

S_IXGRP 00010 group has execute permission

S_IRWXO 00007 mask for permissions for others (not in group)

S_IROTH 00004 others have read permission

S_IWOTH 00002 others have write permission

S_IXOTH 00001 others have execute permission

实例:

#include

#include

#include

#include

#include

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

{

struct stat info;

if (argc != 2)

{

fprintf(stderr, "Usage: %s

", argv[0]);

exit(EXIT_FAILURE);

}

if (stat(argv[1], &info) == -1)

{

perror("stat");

exit(EXIT_FAILURE);

}

printf("File type; ");

switch(info.st_mode & S_IFMT)

{

case S_IFBLK: printf("block device

"); break;

case S_IFCHR: printf("character device

"); break;

case S_IFDIR: printf("directory

"); break;

case S_IFIFO: printf("FIFO pipe

"); break;

case S_IFLNK: printf("symlink

"); break;

case S_IFREG: printf("regular file

"); break;

case S_IFSOCK: printf("socket

"); break;

default: printf("unknown

"); break;

}

printf("I-node number: %ld

", (long)info.st_ino);

printf("Mode: %lo(octal)

",

(unsigned long)info.st_mode);

printf("Link count: %ld

", (long)info.st_nlink);

printf("Ownership: UID=%ld GID=%ld

",

(long)info.st_uid, (long)info.st_gid);

printf("Preferred I/O block size: %ld bytes

",

(long) info.st_blksize);

printf("File size: %lld bytes

",

(long long) info.st_size);

printf("Blocks allocated: %lld

",

(long long) info.st_blocks);

printf("Last status change: %s", ctime(&info.st_ctime));

printf("Last file access: %s", ctime(&info.st_atime));

printf("Last file modification: %s", ctime(&info.st_mtime));

exit(EXIT_SUCCESS);

}

执行结果:

liujl@liujl-ThinkPad-Edge-E431:~/linux_program/list$ ./stat stat.c

File type; regular file

I-node number: 679622

Mode: 100644(octal)

Link count: 1

Ownership: UID=1000 GID=1000

Preferred I/O block size: 4096 bytes

File size: 2102 bytes

Blocks allocated: 8

Last status change: Wed Jul 16 23:26:20 2014

Last file access: Wed Jul 16 23:26:35 2014

Last file modification: Wed Jul 16 23:26:20 2014

附录为/usr/include/sys/stat.h源代码:

/*-

* Copyright (c) 1982, 1986, 1989 The Regents of the University of California.

* All rights reserved.

*

* Redistribution and use in source and binary forms, with or without

* modification, are permitted provided that the following conditions

* are met:

* 1. Redistributions of source code must retain the above copyright

* notice, this list of conditions and the following disclaimer.

* 2. Redistributions in binary form must reproduce the above copyright

* notice, this list of conditions and the following disclaimer in the

* documentation and/or other materials provided with the distribution.

* 3. All advertising materials mentioning features or use of this software

* must display the following acknowledgement:

*This product includes software developed by the University of

*California, Berkeley and its contributors.

* 4. Neither the name of the University nor the names of its contributors

* may be used to endorse or promote products derived from this software

* without specific prior written permission.

*

* THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND

* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE

* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE

* ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE

* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL

* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS

* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)

* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT

* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY

* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF

* SUCH DAMAGE.

*

*@(#)stat.h7.11 (Berkeley) 3/3/91

*/

struct stat

{

dev_tst_dev;/* inode's device */

ino_tst_ino;/* inode's number */

mode_tst_mode;/* inode protection mode */

nlink_tst_nlink;/* number of hard links */

uid_tst_uid;/* user ID of the file's owner */

gid_tst_gid;/* group ID of the file's group */

dev_tst_rdev;/* device type */

off_tst_size;/* file size, in bytes */

time_tst_atime;/* time of last access */

longst_spare1;

time_tst_mtime;/* time of last data modification */

longst_spare2;

time_tst_ctime;/* time of last file status change */

longst_spare3;

longst_blksize;/* optimal blocksize for I/O */

longst_blocks;/* blocks allocated for file */

u_longst_flags;/* user defined flags for file */

u_longst_gen;/* file generation number */

};

#defineS_ISUID0004000/* set user id on execution */

#defineS_ISGID0002000/* set group id on execution */

#ifndef _POSIX_SOURCE

#defineS_ISTXT0001000/* sticky bit */

#endif

#defineS_IRWXU0000700/* RWX mask for owner */

#defineS_IRUSR0000400/* R for owner */

#defineS_IWUSR0000200/* W for owner */

#defineS_IXUSR0000100/* X for owner */

#ifndef _POSIX_SOURCE

#defineS_IREADS_IRUSR

#defineS_IWRITES_IWUSR

#defineS_IEXECS_IXUSR

#endif

#defineS_IRWXG0000070/* RWX mask for group */

#defineS_IRGRP0000040/* R for group */

#defineS_IWGRP0000020/* W for group */

#defineS_IXGRP0000010/* X for group */

#defineS_IRWXO0000007/* RWX mask for other */

#defineS_IROTH0000004/* R for other */

#defineS_IWOTH0000002/* W for other */

#defineS_IXOTH0000001/* X for other */

#ifndef _POSIX_SOURCE

#defineS_IFMT 0170000/* type of file */

#defineS_IFIFO 0010000/* named pipe (fifo) */

#defineS_IFCHR 0020000/* character special */

#defineS_IFDIR 0040000/* directory */

#defineS_IFBLK 0060000/* block special */

#defineS_IFREG 0100000/* regular */

#defineS_IFLNK 0120000/* symbolic link */

#defineS_IFSOCK 0140000/* socket */

#defineS_ISVTX 0001000/* save swapped text even after use */

#define S_BLKSIZE512/* block size used in the stat struct */

/* 0666 */

#defineDEFFILEMODE(S_IRUSR|S_IWUSR|S_IRGRP|S_IWGRP|S_IROTH|S_IWOTH)

#endif

#defineS_ISDIR(m)((m & 0170000) == 0040000)/* directory */

#defineS_ISCHR(m)((m & 0170000) == 0020000)/* char special */

#defineS_ISBLK(m)((m & 0170000) == 0060000)/* block special */

#defineS_ISREG(m)((m & 0170000) == 0100000)/* regular file */

#defineS_ISFIFO(m)((m & 0170000) == 0010000)/* fifo */

#ifndef _POSIX_SOURCE

#defineS_ISLNK(m)((m & 0170000) == 0120000)/* symbolic link */

#defineS_ISSOCK(m)((m & 0170000) == 0140000)/* socket */

#endif

#ifndef KERNEL

#include

__BEGIN_DECLS

mode_tumask __P((mode_t));

intchmod __P((const char *, mode_t));

intfstat __P((int, struct stat *));

intmkdir __P((const char *, mode_t));

intmkfifo __P((const char *, mode_t));

intstat __P((const char *, struct stat *));

#ifndef _POSIX_SOURCE

intfchmod __P((int, mode_t));

intlstat __P((const char *, struct stat *));

#endif /* not POSIX */

__END_DECLS

#endif

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/357589.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

!function(){}()

http://my.oschina.net/u/2331760/blog/468672?p{{currentPage1}} ( function(){…} )()和( function (){…} () )是两种javascript立即执行函数的常见写法,最初我以为是一个括号包裹匿名函数,再在后面加个括号调用函数,最后达到函数定义后立…

altium designer 10哪个作者写的好 。

问题截图: 博主解答: 其实这种书籍基本内容都差不多,很多都是作者来回借鉴,我们能根据自己的需要学到知识即可。

orm查询部分字段_ORM问题第2部分–查询

orm查询部分字段在我以前关于对象关系映射工具(ORM)的帖子中,我讨论了在处理当今常见的ORM(包括Hibernate)时遇到的各种问题。 其中包括与从POJO生成架构有关的问题,实际性能和不断出现的维护问题。 本质上…

新浪微博开发-添加子视图控制器设置颜色

一.添加子视图控制器 二.设置颜色 设置颜色:两种方法 一种较为繁琐,详见视频 第二种: //设置颜色 self.tabBar.tintColor UIColor.orangeColor()转载于:https://www.cnblogs.com/torrescx/p/5237142.html

linux ssh无需密码,linux下 ssh 实现无需密码的远程登陆

主机A(OpenSUSE12.1):119.78.222.95主机B (Fedora16): 202.122.25.361.主机A:生成秘钥对id_rsa和id_rsa.publinux-9juc:~ # ssh-keygen -t rsaGenerating public/private rsa key pair.Enter file in which to save the key (/root/.ssh/id_rsa):Created directory /root/.ssh.…

Android studio的sdk tools下没有LLDB的解决办法

粉丝提问: 博主解答: 解决办法: 点击setting--》plugins--》找到“Android Support”选项,并勾选,然后会提示重启android studio ,点击重启,ok,如果已经设置好SDK的路径的话,问题解…

随机JCache内容:多个提供程序和JMX Bean

JCache(JSR 107)是用于缓存的Java标准…足够了。 没有更多介绍性的东西。 这是一则速成文章,内容涉及 多个JCache提供程序配置,以及 功能:通过JMX Mbeans的JCache统计信息 管理多个JCache提供程序 如果您只使用一个…

HDU 2222 ac自动机模板

题意: 求n个模板串在匹配串中出现了几个. SOL: 反正就是模板啦...似乎比KMP都简单----这么说似乎有点不道德...毕竟先看的KMP而他们并没有什么不同... 貌似自己的理解和他们画的图还是有些出入......不虚慢慢看... 然后就是特殊一点的一个last数组,可以比较迅速地找到包含的子串…

linux下spi添加设备,Linux Kernl添加spidev的设备节点

一、spidev介绍如果在内核中配置spidev,会在/dev目录下产生设备节点,通过此节点可以操作挂载在该SPI总线上的设备。用户空间通过该节点可以访问内核空间。二、配置spidev设备步骤在i.MX6,Kernel 4.1.15上配置spidev的支持。1、配置dts支持spi…

Android studio Jin开发生成so文件的具体步骤

粉丝提问: 博主解答: 帖子链接:https://blog.csdn.net/wangsfine/article/details/51445199

linux中改变文件大小,Linux 改变文件大小的方法

函数原型:#include int ftruncate(int fd, off_t length); //改变文件大小为length指定大小;返回值 执行成功则返回0,失败返回-1。函数ftruncate会将参数fd指定的文件大小改为参数length指定的大小。参数fd为已打开的文件描述词,而且必须是以…

Ubuntu下使用SVN

Ubuntu下使用SVN SVN作为日常开发中不可缺少的工具,今天终于开始在Ubuntu下使用了。 1、首先需要安装SVN。Ubuntu下的SVN安装十分简单,sudo apt-get install subversion,然后根据提示一步一步,就完成了SVN的安装; 2、检…

apktool重新打包,error:No resource identifier found for attribute ‘compileSdkVersionCodename‘ in package

报错日志:AndroidManifes.xml :1 error:No resource identifier found for attribute compileSdkVersionCodename in package ‘android’ 粉丝提问: 报错图: 博主解答:

linux弹性网卡,将弹性网卡附加到 ECS 实例上之后如何配置弹性网卡

本文在介绍将弹性网卡附加到 ECS 实例上之后如何配置弹性网卡的基础上,重点探讨了其具体步骤,本文内容很紧凑,希望大家耐心学习。配置 ECS 实例的弹性网卡如果您的实例使用以下几种镜像,您不需要手工配置弹性网卡(ENI)&#xff1a…

vaadin_嵌入式码头,Vaadin和焊接

vaadin当我开发Web应用程序时,我希望能够从Eclipse快速启动它们,而不必依赖各种重量级的tomcat或glassfish插件。 因此,我经常要做的就是创建一个可以直接从Eclipse直接运行的基于Java的简单Jetty启动器。 该启动器会在几秒钟内启动&#xff…

终端-进入云服务器

解决办法: 1.先进入管理员模式: 2.下一步,链接服务器。 3.已经连接上服务器: 4.找到云服务器的项目路径: 在这里: 我们可以在cd空格/ 按Tab寻找下个文件夹,也可以输入ls查看文件夹。转载于…

Android studio 清除缓存数据的步骤

导读:在eclipse的当中进行运行Android的运用的程序的时候,就会产生内存缓存的信息,而eclipse是可以直接点击停止运行程序,然后点击清除缓存,就可以解决了这个问题,而Android studio却不能直接点击停止运行的,而只能通过其它的方式来清除Android studio中的缓存。 可以看…

linux 函数 文件校验,Linux中的文件效验命令

在网络传输、设备之间转存、复制大文件等时,可能会出现传输前后数据不一致的情况。这种情况在网络这种相对更不稳定的环境中,容易出现。那么校验文件的完整性,也是势在必行的。md5sum命令用于生成和校验文件的md5值,MD5全称报文摘…

为Java应用程序编写数据驱动的测试

JUnit是一个功能非常强大的测试框架,它不仅为其用户提供了编写快速简便的测试的功能,而且还为用户提供了扩展它并使其按其期望的方式工作的机会。 在JUnit之上构建了许多框架,这些框架为目标受众提供了各种易用的功能。 EasyTest是这样一种框…

为《31天成为IT服务达人》征求正式名字

写书时。没细想书的名字,仅仅是在想出本能够让同行或未来同行高速入门的书,如今想来还是应正式给他取个名,请朋友们帮忙哟 转载于:https://www.cnblogs.com/bhlsheji/p/5241848.html