EDA365电子论坛网
标题:
linux - 讲解stat函数
[打印本页]
作者:
mytomorrow
时间:
2019-10-9 10:25
标题:
linux - 讲解stat函数
表头文件: #include <sys/stat.h>
' @3 \2 @7 a+ G. j
: Z0 E4 C. R) w* _1 ?
#include <unistd.h>
3 K* k w m A+ B+ z7 a; t
定义函数: int stat(const char *file_name, struct stat *buf);
( P* n* L1 N1 a0 o$ L5 C3 V
4 \4 f7 i% l; i6 v1 S9 M m% f
函数说明: 通过文件名filename获取文件信息,并保存在buf所指的结构体stat中
! P, X K- z# Z4 ?1 H, _
0 i& E/ ]; d; [0 b& i3 e. ^
返回值: 执行成功则返回0,失败返回-1,错误代码存于errno
2 \# n, n9 I2 T7 B8 W* J4 u* w5 J
3 E9 i4 U! ?& y2 J2 o% p0 O5 U1 C
9 N6 B ]/ c% G# s
错误代码:
: T' H. `/ Z$ b! t2 H+ f/ d
ENOENT 参数file_name指定的文件不存在
- g; b% X2 F5 Z; C* m" g2 F' V! y! K
ENOTDIR 路径中的目录存在但却非真正的目录
# X2 @8 |% g2 M7 y4 S
ELOOP 欲打开的文件有过多符号连接问题,上限为16符号连接
7 Z. R/ v. r/ V5 C3 A8 r( |& c2 Y/ K
EFAULT 参数buf为无效指针,指向无法存在的内存空间
1 p+ P- `7 A2 b9 H
EACCESS 存取文件时被拒绝
) u( j8 A5 L5 ?# k2 G8 J
ENOMEM 核心内存不足
8 ?, z5 \$ E# g8 M
ENAMETOOLONG 参数file_name的路径名称太长
' g$ L7 J9 K/ l
' _) C, ?2 A- }
- s- I* ~8 K( L
#include <sys/stat.h>
/ e' B: n' ]7 _. j* o: i
#include <unistd.h>
1 r9 B$ y S( r* F) H3 @, b1 ?1 k! \5 K% M
#include <stdio.h>
/ R9 r0 t: }, o ]
' O9 S( p" D4 f" G& ?
int main() {
1 W! K. a8 }0 h
struct stat buf;
% V- u4 Z/ ^4 R* ?' k$ r2 c
stat("/etc/hosts", &buf);
3 V- C9 g7 O- J3 ~0 y4 R2 M
printf("/etc/hosts file size = %d/n", buf.st_size);
0 i" P+ J( I1 Q( v/ w2 x
}
S9 c2 i4 c' Y. z, X8 J2 }
7 V' l! F- V% r3 R3 h; a# P
& s1 I) E1 s, b3 f3 K
-----------------------------------------------------
: {& y" [/ n: j
struct stat {
7 a7 U% w" p0 I2 r# p }; k2 {
dev_t st_dev; //文件的设备编号
. j) F: U3 b" M0 L2 }
ino_t st_ino; //节点
) b6 a0 T' j% e1 m* |% O
mode_t st_mode; //文件的类型和存取的权限
4 h4 a, p# A6 @: z8 N
nlink_t st_nlink; //连到该文件的硬连接数目,刚建立的文件值为1
3 k% V+ a- R( t3 @/ r
uid_t st_uid; //用户ID
6 C0 _$ D) m3 x6 |0 p# U
gid_t st_gid; //组ID
3 G, r- E* W. ?# _# G% e
dev_t st_rdev; //(设备类型)若此文件为设备文件,则为其设备编号
: c- _, m L* S3 X5 L
off_t st_size; //文件字节数(文件大小)
! |' A, j- D4 Y1 g$ r) e
unsigned long st_blksize; //块大小(文件系统的I/O 缓冲区大小)
5 L# A( v4 @$ [7 i/ |7 n: H. i
unsigned long st_blocks; //块数
l5 b. [! ~* p9 Z. L) ^
time_t st_atime; //最后一次访问时间
$ Y/ a/ h1 U& H' q' ?- a
time_t st_mtime; //最后一次修改时间
8 U/ C" a: F7 I; x& C( f# L
time_t st_ctime; //最后一次改变时间(指属性)
g! _4 d0 N& @- w/ Z
};
" y! K$ N3 x, `/ D7 Y
6 L8 u& N/ W, s8 k5 j
3 j/ ?( A8 q0 o) s* c4 r) ]9 E
先前所描述的st_mode 则定义了下列数种情况:
. R% @* U1 G0 i9 M2 @) G0 o
' E+ G2 w( y; F8 I$ N8 g4 S
% l" @4 s; \9 ]+ E- _
4 d$ [0 o9 r9 Y9 ]1 ~" v9 O$ c) A: o
1 k) r' Q! Z8 O5 Q0 m+ K* H/ T
9 T2 p: e; P0 u2 `* W( F* Q$ o
/ @0 T1 S7 z4 P! b r6 M* C
作者:
helendcany
时间:
2019-10-9 18:52
学习一下,谢谢分享。
欢迎光临 EDA365电子论坛网 (https://bbs.eda365.com/)
Powered by Discuz! X3.2