文件属性
一、文件属性
- 属性描述结构体
struct stat {
dev_t st_dev; /如果是设备,返回文件使用的设备号,否则为 0/
ino_t st_ino; /* 索引节点号 /
mode_t st_mode; / 文件类型 /
nlink_t st_nlink; / 文件的硬连接数 /
uid_t st_uid; / 所有者用户识别号*/
gid_t st_gid; /* 组识别号 /
dev_t st_rdev; / 设备类型*/
off_t st_size; /* 文件大小,字节表示 /
blksize_t st_blksize; / 系统每次按块Io操作时块的大小(一般是512或1024)/
blkcnt_t st_blocks; /块的索引号 /
time_t st_atime; / 最后访问时间,如read/
time_t st_mtime; / 最后修改时间*/
time_t st_ctime; /* 创建时间 */
}; - 获取属性
-
stat
- 功能:提供文件名字,获取文件对应属性。
- 函数原型:int stat(const char *path,struct stat *buf)(第一个参数为传入的文件,第二个参数为属性)(文件不打开执行stat)
- 所属头文件:<sys/types.h>、<sys/stat.h>、<unistd.h>
- 参数:path:文件路径 buf:返回文件的文件信息
- 返回值:成功返回0,失败返回-1
-
fstat
- 功能:通过文件描述符获取文件对应的属性。
- 函数原型:int fstat(int fds,struct stat *buf)(第一个参数为传入的文件描述符,第二个参数为属性)(文件打开后才能执行fstat)
- 所属头文件:<sys/types.h>、<sys/stat.h>、<unistd.h>
- 参数: fds:文件描述符 buf:返回文件的信息,
- 返回值:成功返回0,失败返回-1
-
lstat
- 功能:连接文件描述名,获取文件属性。
- 函数原型:int lstat(const char *path,struct stat *buf)
- 所属头文件:<sys/types.h>、<sys/stat.h>、<unistd.h>
- 参数:path:文件路径 buf:返回文件的文件信息,针对符号链接,返回链接本身,而不是非目标文件
- 返回值:成功返回0,失败返回-1
stat和lstat的作用完全相同都是取得参数file_name 所指的文件状态, 其差别在于, 当文件为符号连接时, lstat()会返回该链接本身的状态,而不是非目标文件。
stat 和 fstat的差别:一个传递带路径的文件名或者目录名
传递文件的描述符 -
access权限的核查
- 功能:可检测当前用户(运行这个程序的用户)对
某文件是否有某权限 - 函数原型: int access(const char *pathname, int mode);
- 所属头文件:<unistd.h>
- 参数:pathname:文件或者是目录路径, mode
- R_OK:测试读权限
- W_OK:测试写权限
- X_OK:测试执行权限
- F_OK:测试文件是否存在
- 返回值:若所有欲查核的权限都通过了检查则返回0值,表示成功,只要有一权限被禁止则返回-1
- 功能:可检测当前用户(运行这个程序的用户)对
二、目录操作API
1.基本函数
- mkdir创建目录
- 功能:创建目录
- 函数原型:int mkdir(const char *pathname, mode_t mode);
- 所属头文件: <sys/stat.h> <sys/types.h>
- 参数:pathname:文件路径,mode:直接使用数字即可(权限)
- 返回值:成功返回0,失败返回-1
- rmdir == rm删除目录
- 功能:删除目录
- 函数原型:int rmdir(const char *pathname);
- 所属头文件: <unistd.h>
- 参数:要删除目录路径,你也可以直接写argv[1]
- 返回值:成功返回0,失败返回-1
- getcwd == pwd
- 功能:获取当前目录
- 函数原型: char *getcwd(char *buf, size_t size);
char *get_current_dir_name(void);
//char *getwd(char *buf);(最后一个不常用) - 所属头文件: <unistd.h>
- 参数:buf:保存当前目录缓存区,size:buf最大为255字节
- 返回值:成功返回指向当前目录的指针,和部分值一样,错误返回NULL
- chdir == cd
- 功能:修改当前目录,即切换目录,相当于 cd 命令
- 函数原型:int chdir(const char *path);
- 所属头文件: <unistd.h>
- 参数:path:文件路径
- 返回值:成功返回0,失败返回-1
- chmod
- 功能:更改权限
- 函数原型:int chmod(const char *path, mode_t mode);
- 所属头文件:#include <sys/types.h> #include <sys/stat.h>
- 参数:path:文件路径 mode 权限
- 返回值:成功返回0,失败返回-1
- 读取目录
- struct dirent结构体
- 存储目录中的文件信息(文件名、扩展名等等)
#include <dirent.h>
struct dirent
{
long d_ino; /* inode number 索引节点号 /
off_t d_off; / offset to this dirent 在目录文件中的偏移 /
unsigned short d_reclen; / length of this d_name 文件名长 /
unsigned char d_type; / the type of d_name 文件类型 /
char d_name [NAME_MAX+1]; / file name (null-terminated) 文件名,最长255字符 */
} - opendir
- 功能:打开目录
- 函数原型:DIR *opendir(const char *name);
- 所属头文件:#include <sys/types.h>#include <dirent.h>
- 参数:目录的路径
- 返回值:成功返回指向当前目录的指针,错误返回NULL
- closedir
- 功能:关闭目录
- 函数原型:int closedir(DIR *dir);
- 所属头文件:#include <sys/types.h>#include <dirent.h>
- 参数:opendir返回的指针
- 返回值:成功返回0,错误返回-1
- readdir
- 功能:读取目录信息
- 函数原型:struct dirent *readdir(DIR *dir);
- 所属头文件:#include <sys/types.h>#include <dirent.h>
- 参数:打开目录后返回的文件指针
- 返回值:成功返回指向dirp的指针dirent,错误返回NULL
- rewinddir
- 功能:重新定位到目录文件的头部
- 函数原型:void rewinddir(DIR *dir);
- 所属头文件:#include <sys/types.h>#include <dirent.h>
- 参数:打开目录后返回的文件指针
- seekdir
- 功能:设置参数dir 目录流目前的读取位置, 在调用readdir()时便从此新位置开始读取. 参数offset 代表距离目录文件开头的偏移量。
- 函数原型:void seekdir(DIR *dir,off_t offset);
- 所属头文件:#include <sys/types.h>#include <dirent.h>
- 参数:打开目录后返回的文件指针, offset :代表距离目录文件开头的
偏移量 - 返回值:无
- rewinddir
- 功能:取得目录流的读取位置
- 函数原型:off_t telldir(DIR *dir);
- 所属头文件:#include <sys/types.h>#include <dirent.h>
- 参数:打开目录后返回的文件指针
- 返回值:成功返回距离目录文件开头的偏移量返回值返回下个读取位置, 有错误发生时返回-1