目录的创建
int mkdir(const char *pathname, mode_t mode)
创建一个新的空目录,空目录中会自动创建.和..目录项。所创建的目录的存取许可权由mode指定
返回值:
成功:0
错误:-1
目录的删除
int rmdir(const char *pathname)
rmdir只能删除由参数pathname指定的空目录
返回值;
成功:0
错误:-1
获取当前目录
char *getcwd(char *buf, size_t size)
char *get_current_dir_name(void)
char *getcwd(char *buf)
getcwd会将当前的工作目录绝对路径复制到参数buf所指向的内存空间,参数size为buf的空间大小。
在调用此函数时,buf所指向的内存空间要足够大,若工作目录据对路径的字符串长度超过参数size大小,则返回值为NULL。若buf为NULL,getcwd会根据参数size的大小自动分配内存,如果参数size也为0,则getcwd会根据工作目录绝对路径的字符串长度来决定配置的内存大小。
返回值:
成功:将结果复制到参数buf所指向的内存空间,或是返回自动配置的字符串指针。
失败:返回NULL
如果定义了_GUN_SOURCE,则也可以使用函数get_current_dir_name获取当前工作目录。如果设置了环境变量PWD,则返回PWD的值。
如果定义了_BSD_SOURCE或_XOPEN_SOURCE_EXTENDED,也可以使用getwd获取当前工作目录。
设置工作目录
int chdir(const char *path)
int fchdir(int fd)
chdir用来将当前工作目录改为由参数path指定的目录,fchdir用来将当前工作目录改为由参数fd文件描述符指定的目录。
返回值:
成功:0
错误:-1
测试程序:在当前目录下创建目录program/gram1.gram2.gram3。设置工作目录为gram2,输出当前工作目录并,最后删除gram1目录。
代码:
#include <stdio.h>
#include <unistd.h>
#include <string.h>
int main(int argc, char **argv)
{
if (argc != 1)
{
printf("Usage:\n");
printf("dir\n");
return0;
}
// 创建目录
if (mkdir("./program") != 0)
{
printf("Error:%d\n", __LINE__);
return0;
}
if (mkdir("./program/gram1") != 0)
{
printf("Error:%d\n", __LINE__);
return0;
}
if (mkdir("./program/gram2") != 0)
{
printf("Error:%d\n", __LINE__);
return0;
}
if (mkdir("./program/gram3") != 0)
{
printf("Error:%d\n", __LINE__);
return0;
}
// 设置工作目录
if (chdir("./program/gram2") != 0)
{
printf("Error:%d\n", __LINE__);
return0;
}
// 获取工作目录
char path[512];
getcwd(path, 512);
if (path == NULL)
{
printf("Error:%d\n", __LINE__);
return0;
}
printf("path= %s\n", path);
// 分隔字符串
const char *p = strrchr(path, '\/');
const char *start = path;
char prename[512];
int k = 0;
while(start++ != p)
{
prename[k] = path[k];
printf("%c",path[k++]);
}
prename[k] = '\0';
printf("\n");
if(p != NULL)
{
printf("%s\n",p+1);
}
// 删除目录
char rmname[512];
sprintf(rmname, "%s/gram1", prename);
printf("rmname= %s\n", rmname);
if (rmdir(rmname)!= 0)
{
printf("Error:%d\n", __LINE__);
return0;
}
return 0;
}