1. getcwd函数
#include<unistd.h>
char* getcwd(char* buf, size_t size);
/*
功能:
获取当前进程的工作目录放在大小为size的buf中
参数:
buf:存放当前工作目录的缓冲区
size:缓冲区大小
返回值:
成功:buf中保存当前进程工作目录
失败:NULL
*/
getcwd示例:
#include<stdio.h>
#include<unistd.h>
#include<string.h>
#define SIZE 128
int test01() {
char buf[SIZE];
memset(buf, 0, SIZE);
char* pwd = getcwd(buf, SIZE);
printf("%s\n", pwd);
}
运行结果:
2. chdir函数
#include<unistd.h>
int chdir(const char* path);
/*
功能:
修改当前进程的工作目录为path
参数:
path:修改的工作目录
返回值:
成功:0
失败:-1
*/
getcwd 和chdir使用示例:
#include<stdio.h>
#include<unistd.h>
#include<string.h>
#define SIZE 128
int test01() {
int ret = -1;
char buf[SIZE];
memset(buf, 0, SIZE);
// 1. 获取当前工作目录
char* pwd = getcwd(buf, SIZE);
if (pwd == NULL) {
perror("getcwd");
return 1;
}
printf("当前的工作目录:%s\n", pwd);
// 2. 切换工作目录
ret = chdir("/home/mym"); // 若为/root则Permission denied
if (-1 == ret) {
perror("chdir");
return 1;
}
// memset(buf, 0, SIZE);
pwd = getcwd(buf, SIZE);
if (pwd == NULL) {
perror("getcwd");
return 1;
}
printf("切换后的工作目录:%s\n", pwd);
return 0;
}
运行结果:
3. opendir函数
#include<sys/types.h>
#include<dirent.h>
DIR* opendir(const char* dirname);
/*
功能:
打开目录dirname
参数:
dirname:目录名
返回值:
成功:指向该目录结构体的指针
失败:NULL
*/
4. closedir函数
#include<sys/types.h>
#include<dirent.h>
int closedir(DIR* dirp);
/*
功能:
关闭目录dirp
参数:
dirp:目录指针
返回值:
成功:0
失败:-1
*/
5. readdir函数
#include<dirent.h>
struct dirent* readdir(DIR* dirp);
/*
功能:
读取目录dirp。
readdir会记录目录流当前位置,下次调用时会从上次停止的地方继续读取,直至读取到目录流末尾。
参数:
dirp:需要读取的目录
返回值:
成功:目录结构体指针
失败:NULL
*/
dirent结构体说明:
struct dirent {
ino_t d_ino; // 目录的inode
off_t d_off; // 目录文件开头至此目录进入点的偏移
signed short int d_reclen; // d_name的长度,不包含NULL字符
unsigned char d_type; // d_type指向的文件类型
char d_name[256]; // 目录名
}
readdir使用示例:
#include<stdio.h>
#include<sys/types.h>
#include<dirent.h>
/*读取目录内容*/
int test03() {
DIR* dir = NULL;
struct dirent* d = NULL;
// 1. 打开目录
dir = opendir("/home/");
if (NULL == dir) {
perror("opendir");
return 1;
}
printf("打开目录成功.\n");
// 2. 循环读取目录
while (1) {
// 读取目录内容
d = readdir(dir);
if (NULL == d) {
perror("readdir");
break;
}
printf("d_type: %hu d_name: %s\n", d->d_type, d->d_name);
}
// 3. 关闭目录
closedir(dir);
}
运行结果: