linux c文件属性,【linux c learn 之stat】获取文件的属性
NAME
stat 獲取文件屬性
這個(gè)函數(shù)位于頭文件里
函數(shù)原型:
int stat(const char *path, struct stat *buf);
參數(shù):
path ?文件路徑+文件名稱
buf ? ? 指向buffer的指針
返回值:
-1 ? 遇到錯(cuò)誤
0 ? ?成功返回
函數(shù)作用:
把path文件的信息拷貝到指針buf所指的結(jié)構(gòu)體中。
描寫敘述
stat結(jié)構(gòu)體:
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包括設(shè)備文件的ID
st_inoi結(jié)點(diǎn)
st_mode文件類型和許可權(quán)限
st_nline文件鏈接數(shù)
st_uid用戶全部者的ID
st_gid所屬組的ID
st_rdev設(shè)備ID(假設(shè)指定文件)
st_size?所占的字節(jié)數(shù)
st_blksize文件系統(tǒng)I/O塊大小
st_block分配的512B大小的
st_atime最后訪問(wèn)時(shí)間
st_mtime最后改動(dòng)時(shí)間
st_ctime狀態(tài)最后改變時(shí)間
以下的POSIX宏定義用于核對(duì)st_mode域的文件類型
S_ISREG(m) 是常規(guī)文件?
S_ISDIR(m) 文件夾?
S_ISCHR(m) 字符設(shè)備?
S_ISBLK(m) 塊設(shè)備?
S_ISFIFO(m) FIFO?
S_ISLNK(m) 符號(hào)鏈接? (Not in POSIX.1-1996.)
S_ISSOCK(m) 套接字? (Not in POSIX.1-1996.)
以下的標(biāo)志用于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
實(shí)例:
#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);
}
執(zhí)行結(jié)果:
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
總結(jié)
以上是生活随笔為你收集整理的linux c文件属性,【linux c learn 之stat】获取文件的属性的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: oracle19c方言,JFinal框架
- 下一篇: linux ssh无需密码,linux下