关闭

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

标签: 工作linuxpathnullshell算法
8315人阅读 评论(0) 收藏 举报

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;

}

1
0

猜你在找
【直播】机器学习&深度学习系统实战(唐宇迪)
【直播】Kaggle 神器:XGBoost 从基础到实战(冒教授)
【直播回放】深度学习基础与TensorFlow实践(王琛)
【直播】计算机视觉原理及实战(屈教授)
【直播】机器学习之凸优化(马博士)
【直播】机器学习之矩阵(黄博士)
【直播】机器学习之概率与统计推断(冒教授)
【直播】机器学习之数学基础
【直播】TensorFlow实战进阶(智亮)
【直播】深度学习30天系统实训(唐宇迪)
查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:78989次
    • 积分:1071
    • 等级:
    • 排名:千里之外
    • 原创:30篇
    • 转载:0篇
    • 译文:0篇
    • 评论:3条
    最新评论