- 论坛徽章:
- 0
|
Files and Directories
stat,fstat和lstat函数(#include <sys/stat.h>):
int stat(const char *restrict pathname, struct stat *restrict buf);
int fstat(int fields, struct stat *buf);
int lstat(const char *restrict pathname, struct stat *restrict buf);
成功返回0,错误返回1
stat函数得到给定路径名文件的信息结构体,fstat函数是对打开的文件使用,lstat对文件链接使用时返回连接的信息结构体。
第二个参数
struct stat {
mode_t st_mode; 文件类型和权限
ino_t st_ino; i-node号(序号)
dev_t st_dev; 设备号(文件系统)
dev_t st_rdev; 设备号(特殊文件)
nlink_t st_nlink; 连接数
uid_t st_uid; 所有者id
gid_t st_gid; 所有者组id
off_t st_size; 文件大小
time_t st_atime; 最后一次访问时间
time_t st_mtime; 最后一次修改时间
time_t st_ctime; 最后一次文件状态改变时间
blksize_t st_blksize; 最合适的I/O block大小
blkcnt_t st_blocks; 分配的磁盘block数
}
文件类型 st_mode:
Regular file、directory file
Block special file:提供固定大小单元的buffered I/O 访问的文件类型,比如磁盘驱动
Character special file:不提供buffered I/O的文件系统。所有设备或是block special 或是character special。
FIFO:用于进程通信的文件类型
Socket:用于网络进程通信的文件类型
Symbolic link:指向另一个文件的文件类型
文件权限:
St_mode :S_IRUSR user-read 、S_IWUSR user-write、S_IXUSR user-execute、S_IRGRP group-read、S_IWGRP group-write、S_IXGRP group-execute、S_IROTH other-read、S_IWOTH other-write、S_IXOTH other-execute
Access函数:#include <unistd.h>
Int access(const char *pathname, int mode);
参数mode:
R_OK 测试读权限
W_OK 测试写权限
X_OK 测试执行权限
F_OK 测试文件是否存在
Umask 函数: #include <sys/stat.h>
mode_t umask(mode_t cmask);修改创建文件权限为cmask 返回原本创建文件权限
参数cmask可为:
0400 user-read
0200 user-write
0100 user-execute
0040 group-read
0020 group-write
0010 group-execute
0004 other-read
0002 other-write
0001 other-execute
多个值用|连接起来传入函数
Chmod和fchmod函数:#include <sys/stat.h>
int chmod(const char *pathname, mode_t mode);
int fchmode(int fields, mode_t mode);
chown、fchown和lchown函数:#include <unistd.h>
int chown(const char *pathname, uid_t owner, gid_t group);
int fchown(int fields, uid_t owner, gid_t group);
int lchown(const char *pathname, uid_t owner, gid_t group);
修改所有者userid groupid
Truncation 函数:#include <unistd.h>
int truncate(const char *pathname, off_t length);
int ftruncate(int fields, off_t length);
文件系统:
每一个磁盘驱动分成一个或多个分区,每个分区包含一个文件系统。
i-nodes是固定长度得记录,包含文件的大部分信息。
Link , unlink, remove 和rename函数:#inlcude <unistd.h>
int link(const char *existingpath, const char *newpath); 创建一个目录记录,路径指向已存在路径。
Int unlink(const char *pathname);删除一个目录记录
symlink 和 readlink函数:#include <unistd.h> int symlink(const char *actualpath, const char*sympathy);
标志链接:间接地指向文件,hard link是直接指向i-node,hard link要求链接与文件在同一个文件系统且只有超级用户能创建hard link。
Symbolic link 通常用于移动一个文件或整个目录层次到另一个位置。
Symlink和readlink函数:#include <unistd.h> int symlink(const char *actualpath, const char *sympathy);创建symbolic link
Ssize_t readlink(const char* restrict pathname, char* restrict buf, size_t bufsize);
utime函数:#include <utime.h> int utime(const char *pathname, const struct utimbuf *times);用于改变文件访问时间与修改时间。
Struct utimbuf{ time_t actime; 访问时间
time_t modtime; 修改时间
}
Mkdir和rmdir函数:#include<sys/stat.h> int mkdir(const char *pathname, mode_t mode);
该函数创建一个新的空文件目录。
Int rmdir(const char *pathname);
读目录:#include <dirent.h>
DIR *opendir(const char *pathname);
Struct dirent *readdir(DIR *dp);
Void rewinddir(DIR *dp);
Int closedir(DIR *dp);
Long telldir(DIR *dp);
Void seekdir(DIR *dp, long loc);
Struct dirent{
ino_t d_ino; i-node数量
char d_name[NAME_MAX + 1]; 文件名
} |
|