linux --chdir() 改变当前工作目录函数

linux --目录chdir函数

int chdir(const char *path );

 

说明:chdir函数用于改变当前工作目录。调用参数是指向目录的指针,调用进程需要有搜索整个目录的权限。每个进程都具有一个当前工作目录。在解析相对目录引用时,该目录是搜索路径的开始之处。如果调用进程更改了目录,则它只对该进程有效,而不能影响调用它的那个进程。在退出程序时,shell还会返回开始时的那个工作目录。

(1) 内核解析参数中的路径名,并确保这个路径名有效。为了做到这一点,就路径名解析而言,内核使用相同的算法。如果路径名无效,它输出错误消息并退出。

(2) 如果路径名有效,内核定位该目录的索引节点,并检查它的文件类型和权限位,确保目标文件是目录以及进程的所有者可以访问该目录(否则改变到新目录就没有用)。

(3) 内核用新目标目录的路径名和/或索引节点替换u区中当前目录路径名和/或它的索引节点号。

 

错误信息:

EFAULT: path 指向了非法地址

ENAMETOOLNG:路径过长

ENOENT:文件不存在

ENOMEM:内核内存不足

ENOTDIR:给出路径不是目录

EACCES:无访问路径中某个目录的权限

ELOOP:解析路径中太多的符号链接

EIO:发生I/O错误

 

实例1:

#include <unistd.h>

#include <iostream>

int main(void)

{

      long cur_path_len;

      char* cur_work_dir;

   if((cur_path_len = pathconf(".",_PC_PATH_MAX)) == -1)

      {

             perror("Couldn`t get currentworking path length");

             return 1;

      }

      std::cout<<"Current path lengthis "<< cur_path_len<<std::endl;

   if((cur_work_dir = (char*)malloc(cur_path_len)) == NULL)

      {

             perror("Couldn't allocate memoryfor the pathname");

             return 1;

      }

    if (getcwd(cur_work_dir,cur_path_len)==NULL)

{

             perror("Couldn`t get currentworking directory!");

      }

      else

{

             std::cout<< "Currentworking directory is"<<cur_work_dir<<std::endl;

      }

 

if(chdir("..") == -1)

      {

             perror("Couldn`t  change current working diretory!");

             return 1;

      }

   if ((getcwd(cur_work_dir,cur_path_len)) == NULL)

      {

             perror("Couldn`t get currentworking directory!");

             return 1;

      }

      std::cout<<"Afterchangedirectory,Current working directory is"<<cur_work_dir<<std::endl;

      free(cur_work_dir);

      return 0;

}

  • 7
    点赞
  • 33
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值