更改程序运行当前目录

2014-07-23 13:23:33   最后更新: 2014-07-23 13:23:33   访问数量:662




每个进程都有一个当前工作目录,此目录是搜索所有相对路径名的起点,当前工作目录是进程的一个属性,那么,怎么改变当前工作目录呢?

 

e.g.

#include <stdio.h> int main () { system ("cd .."); fopen ("t", "w"); return 0; }

 

该程序执行后,t文件被创建在了可执行文件所在目录,可以知道,这种方法是不可行的,无法实现进程工作目录的改变,而且shell的当前工作目录也没有改变

 

进程可以调用chdir、fchdir两个函数更改当前工作目录

int chdir (const char *path); int fchdir (int filedes);

 

定义于unistd.h头文件中,调用成功返回0,调用失败返回-1

分别用pathname或文件描述符来指定新的当前进程工作目录,但不会改变shell的当前工作目录

 

内核保持有当前工作目录的信息,但是内核为每个进程只保存指向该目录v节点的指针等目录本身的信息,而不保存该目录的完整路径名,因此我们需要使用getcwd函数获取其绝对路径名

char *getcwd(char *buf, size_t size);

 

定义于unistd.h头文件中,调用成功返回buf首地址,否则返回NULL

如果buf的空间大小(size)不足以存储绝对路径名则返回出错

 

一般的,我们在更换进程当前工作目录前会先调用getcwd保存当前的工作目录,以便完成处理后可以回到之前的目录

fchdir函数向我们提供了一个便捷方法,只要在调用fchdir之前使用open打开当前目录,保存其文件描述符即可

 






读书笔记      技术帖      linux      unix      龙潭书斋      apue      unix环境高级编程      chdir      fchdir      getcwd      目录     


京ICP备15018585号