|
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
表头文件: #include <sys/stat.h>
& X, W( A' V8 V4 n E! |
, j7 r- M2 A# u" \. O& q% Z5 @4 W #include <unistd.h>9 C3 _5 b1 S& t8 \( l
定义函数: int stat(const char *file_name, struct stat *buf);
7 u& y9 f# e; B$ {2 @. z/ c- w2 i
函数说明: 通过文件名filename获取文件信息,并保存在buf所指的结构体stat中
% E! p; R9 t1 m% I
4 P7 n* Z5 Q5 X4 C返回值: 执行成功则返回0,失败返回-1,错误代码存于errno
: a. C h- f9 h1 S- \! @6 j9 J+ f- c! C5 z
8 i! R* a8 t- X+ _$ X5 Y8 m
错误代码:
) ~. a1 {" v$ @+ F+ ] ENOENT 参数file_name指定的文件不存在
! Z0 g) R. {6 |) w7 W" K! S ENOTDIR 路径中的目录存在但却非真正的目录: L$ o; u3 f! T6 C; ~4 t- z
ELOOP 欲打开的文件有过多符号连接问题,上限为16符号连接
% v9 t+ `5 K j3 W* x+ Z( F EFAULT 参数buf为无效指针,指向无法存在的内存空间. L* u( y9 w! y/ G* l( w. H
EACCESS 存取文件时被拒绝2 L0 }. d& s+ K( {, A
ENOMEM 核心内存不足* I. c$ m( ^$ I
ENAMETOOLONG 参数file_name的路径名称太长% F9 r. Z# U$ t# n: r
5 F0 a! l; n1 O" t0 M$ z# g
# Y* `( I. k. q5 Z( p2 U. G#include <sys/stat.h>1 m6 T- C4 g9 S
#include <unistd.h>
3 A# C' W" Z' Y" l$ W7 h! }& S! p#include <stdio.h>
/ U2 N- I/ {! n1 a1 @; R4 w {- x
int main() {: I0 L, f5 V8 A2 ~4 o) J
struct stat buf;3 [% e! C3 I5 D
stat("/etc/hosts", &buf);0 w2 P7 s% I/ }, I$ G
printf("/etc/hosts file size = %d/n", buf.st_size);
* x2 N7 c# T7 j}, P, O6 T& |. D- \$ P: \
( H: B" K! P$ y& D" z' y4 C. ^
5 G6 B5 Z6 k: p) [-----------------------------------------------------
' {/ s! P9 V3 H. A' Hstruct stat {3 `7 G5 t" c# A6 P( ? N
dev_t st_dev; //文件的设备编号
; l0 f* n" c$ ^9 q/ m0 g) y ino_t st_ino; //节点
7 d% K' h6 a* U6 D9 w mode_t st_mode; //文件的类型和存取的权限
0 @8 G5 O4 _. r2 y nlink_t st_nlink; //连到该文件的硬连接数目,刚建立的文件值为1# e1 C1 X+ Z. G$ @8 I" d
uid_t st_uid; //用户ID$ L' [0 J" ~- G6 J$ D, ?" p. b
gid_t st_gid; //组ID
/ T2 `/ F' I T0 K/ X2 j2 x( W% c dev_t st_rdev; //(设备类型)若此文件为设备文件,则为其设备编号6 Q4 M2 O3 N4 \& `9 x9 D; y. ^
off_t st_size; //文件字节数(文件大小)
6 o' A* i# c2 s. {* t8 I unsigned long st_blksize; //块大小(文件系统的I/O 缓冲区大小)
% X4 Q. D% s' K8 V& F# s2 O0 X, _. O unsigned long st_blocks; //块数; t. [9 k+ d \5 J( X3 k
time_t st_atime; //最后一次访问时间
- |0 a3 U' P. P8 a: [9 _1 |; ? time_t st_mtime; //最后一次修改时间
8 G, i( V$ A# Z time_t st_ctime; //最后一次改变时间(指属性)/ B- S( h* T" _2 s( `
};
% Z4 U# ^$ ]3 O; m& q* e+ W/ o! b- g
8 U( S2 N, |& f9 e. G
先前所描述的st_mode 则定义了下列数种情况:/ i# g, C% O4 W" j4 l4 g: t
3 }, ?9 v% }& n: S! x( J4 a
, z5 y3 O# {" w& @# |9 E" G, ^/ Y7 U& U6 e
+ _9 ^+ T! J# b/ q9 r
5 k1 u6 D1 I3 T; f# e2 d. \3 C) g* {; Z7 o/ y x n! O
|
|