1、获取目录
C 获取当前目录的实现:
1、getcwd()
(1)函数使用
C语言getcwd()函数:取得当前的工作目录 头文。
char * getcwd(char * buf, size_t size);
函数说明:
getcwd()会将当前的工作目录绝对路径复制到参数buf 所指的内存空间,参数size 为buf 的空间大小。
(1)在调用此函数时,buf 所指的内存空间要足够大。若工作目录绝对路径的字符串长度超过参数size 大小,则 返回NULL,errno 的值则为ERANGE。
(2)倘若参数buf 为NULL,getcwd()会依参数size 的大小自动配置内存(使用malloc()),如果参数size 也为0,则getcwd()会依工作目录绝对路径的字符串程度来决定所配置的内存大小,进程可以在使用完次字符串后利 用free()来释放此空间。
返回值:执行成功则将结果复制到参数buf 所指的内存空间, 或是返回自动配置的字符串指针. 失败返回NULL,错误代码存于errno
2、使用示例
#include ”stdlib.h“
#include “stdio.h”
#include ”string.h“
#include “unistd.h”
//包含了Linux C 中的函数getcwd()
#define FILEPATH_MAX (80)
int main()
{
char *file_path_getcwd;
file_path_getcwd=(char *)malloc(FILEPATH_MAX);
getcwd(file_path_getcwd,FILEPATH_MAX);
printf("%s",file_path_getcwd);
}
3、opendir() 打开目录函数
相关函数:open, readdir, closedir, rewinddir, seekdir, telldir, scandir
定义函数
DIR * opendir(const char * name);
函数说明
opendir()用来打开参数name 指定的目录, 并返回DIR*形态的目录流, 和open()类似, 接下来对目录 的读取和搜索都要使用此返回值.
返回值
成功则返回DIR* 型态的目录流, 打开失败则返回NULL.
错误代码:
1、EACCESS 权限不足。
2、EMFILE 已达到进程可同时打开的文件数上限。
3、ENFILE 已达到系统可同时打开的文件数上限。
4、ENOTDIR 参数name 非真正的目录。
5、ENOENT 参数name 指定的目录不存在, 或是参数name 为一空字符串。
6、ENOMEM 核心内存不足。
4、使用示例
#include “stdio.h”
#include "dirent.h"
#include "string.h"
void List(char *path)
{
struct dirent *ent = NULL; DIR *pDir;
if((pDir = opendir(path)) != NULL)
{
while(NULL != (ent = readdir(pDir)))
{
if(ent->d_type == 8) // d_type:8-文件,4-目录
printf("File:\t%s\n", ent->d_name);
else if(ent->d_name[0] != '.')
{
printf("\n[Dir]:\t%s\n", ent->d_name);
List(ent->d_name); // 递归遍历子目录
printf("返回[%s]\n\n", ent->d_name);
}
}
closedir(pDir);
}
else
printf("Open Dir-[%s] failed.\n", path);
}
int main()
{
char path[] = "/home/zcm/program/test";
List(path);
return 0;
}