目录函数mkdir/rmdir/getcwd/chdir

目录的创建

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所指向的内存空间,参数sizebuf的空间大小。

在调用此函数时,buf所指向的内存空间要足够大,若工作目录据对路径的字符串长度超过参数size大小,则返回值为NULL。若bufNULLgetcwd会根据参数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;

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值