文件属性与目录操作函数 | 小牛学习日记
文件属性与目录操作函数
Published in:2025-02-20 | category: C++
Words: 1.3k | Reading time: 4min | reading:

文件属性与目录操作函数

文件属性操作函数

access

用于检查调用进程是否具有对指定文件的某种访问权限,或者文件是否存在。

1
2
3
#include <unistd.h>

int access(const char *pathname, int mode);

pathname:指向要检查的文件或目录的路径名的字符串指针。
mode:指定要检查的访问权限模式,它可以是以下几个常量的按位或组合:
R_OK:检查是否有读权限。
W_OK:检查是否有写权限。
X_OK:检查是否有执行权限。
F_OK:检查文件是否存在。
返回值
成功:如果进程具有指定的访问权限或者文件存在(根据 mode 参数),则返回 0。
失败:返回 -1,并设置 errno 来指示具体的错误,例如 EACCES 表示没有相应的权限,ENOENT 表示文件不存在。

chmod

用于修改文件或目录的权限。

1
2
3
#include <sys/stat.h>

int chmod(const char *pathname, mode_t mode);

pathname:指向要修改权限的文件或目录的路径名的字符串指针。
mode:指定新的权限模式,通常使用八进制数表示,例如 0644 表示文件所有者有读写权限,组用户和其他用户有只读权限。也可以使用一些常量的按位或组合,如 S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH 与 0644 是等价的。
返回值
成功:返回 0。
失败:返回 -1,并设置 errno 来指示具体的错误,例如 EACCES 表示没有足够的权限来修改文件权限,ENOENT 表示文件不存在。

truncate

用于将文件截断为指定的长度。

1
2
3
4
#include <unistd.h>
#include <sys/types.h>

int truncate(const char *path, off_t length);

path:指向要截断的文件的路径名的字符串指针。
length:指定的文件新长度,类型为 off_t。
返回值
成功:返回 0。
失败:返回 -1,并设置 errno 来指示错误原因,如 EACCES 表示无权限修改文件,ENOENT 表示文件不存在。

目录操作函数

chdir

用于改变当前工作目录,也就是让程序后续的文件操作(如相对路径的文件读写)基于新指定的目录来执行。

1
2
3
#include <unistd.h>

int chdir(const char *path);

path:一个指向字符串的指针,代表要切换到的目标目录的路径。可以是绝对路径(如 /home/user/documents),也可以是相对路径(如 ./subdir)。
返回值
成功:返回 0,表示当前工作目录已成功切换到指定路径。
失败:返回 -1,同时会设置 errno 变量来指示具体的错误原因。常见的错误包括 ENOENT(指定的目录不存在)、EACCES(没有权限访问该目录)等。

mkdir

用于创建一个新的目录。

1
2
3
4
#include <sys/stat.h>
#include <sys/types.h>

int mkdir(const char *pathname, mode_t mode);

pathname:指向要创建的目录的路径名的字符串指针。
mode:指定新创建目录的权限模式,通常用八进制数表示,例如 0755 表示目录所有者具有读、写、执行权限,组用户和其他用户具有读和执行权限。
返回值
成功:返回 0,表示目录创建成功。
失败:返回 -1,并设置 errno 变量。可能的错误有 EEXIST(指定路径的目录已经存在)、EACCES(没有权限在指定位置创建目录)等。

rename

可用于重命名文件或目录,也可以将文件或目录从一个位置移动到另一个位置(前提是目标位置在同一文件系统中)。

1
2
3
#include <stdio.h>

int rename(const char *oldpath, const char *newpath);

oldpath:指向要重命名或移动的文件或目录的当前路径名的字符串指针。
newpath:指向文件或目录的新路径名的字符串指针。
返回值
成功:返回 0,表示重命名或移动操作成功完成。
失败:返回 -1,同时设置 errno 变量。常见错误包括 ENOENT(旧路径的文件或目录不存在)、EEXIST(新路径的文件或目录已经存在且不能被覆盖)等。

目录遍历函数

opendir

用于打开一个目录,并返回一个指向 DIR 类型对象的指针,该对象表示已打开的目录流。

1
2
3
4
#include <sys/types.h>
#include <dirent.h>

DIR *opendir(const char *name);

readdir

从 opendir 打开的目录流中读取下一个目录项,并返回一个指向 struct dirent 类型对象的指针,该对象包含了目录项的相关信息,如文件名等。当没有更多目录项时,返回 NULL。

1
2
3
#include <dirent.h>

struct dirent *readdir(DIR *dirp);

struct dirent结构体通常包含以下成员:

1
2
3
4
5
6
7
struct dirent {
ino_t d_ino; /* inode 编号 */
off_t d_off; /* 目录项在目录文件中的偏移量 */
unsigned short d_reclen; /* 目录项的长度 */
unsigned char d_type; /* 目录项的类型 */
char d_name[256]; /* 目录项的名称 */
};

closedir

关闭由 opendir 打开的目录流,释放相关资源。

1
2
3
4
#include <sys/types.h>
#include <dirent.h>

int closedir(DIR *dirp);
Next:
进程创建常用函数
Prev:
LinuxI/O高级函数