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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值