4.23 函数chdir、fchdir和getcwd

    每个进程都有一个当前工作目录,此目录是搜索所有相对路径名的起点(不以斜线开始的路径名为相对路径名)。当用户登录到UNIX系统时,其当前工作目录通常是口令文件(/etc/passwd)中该用户登录项的第6个字段----用户的起始目录(home directory)。当前工作目录是进程的一个属性,起始目录则是登录名的一个属性。

    进程调用chdir或fchdir函数可以更改当前工作目录。

#include <unistd.h>

int chdir(const char *pathname);

int fchdir(int fd);

                                                                                                                           两个函数的返回值:若成功,返回0;若出错,返回-1

    在这两个函数中,分别用pathname或打开文件描述符来指定新的当前工作目录。

    因为内核必须维护当前工作目录的信息,所以我们应能获取其当前值。遗憾的是,内核为每个进程值保存指向该目录v节点的指针等目录本身的信息,并不保存该目录的完整路径名。

    我们需要一个函数,它从当前工作目录(.)开始,用..找到上一级目录,然后读取器目录项,直到该目录项的i节点编号与工作目录i节点编号相同,这样地就找到了其对应的文件名。按照这种方法,逐层上移,直到遇到根,这样就得到了当前工作目录完整的绝对路径名。很幸运,函数getcwd就提供了这种功能。

#include <unistd.h>

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

                                                                            返回值:若成功,返回buf;若出错,返回NULL

    必须向此函数传递两个参数,一个是缓冲区地址buf,另一个是缓冲区的长度size(以字节为单位)。该缓冲区必须由足够的长度以容纳绝对路径名再加上一个终止null字节,否则返回出错。

    当一个应用程序需要在文件系统中返回到它工作的出发点时,getcwd函数是有用的。在更换工作目录之前,我们可以调用getcwd函数先将其保存起来。在完成了处理后,就可将所保存的原工作目录路径名作为调用参数传送给chdir,这样就返回到了文件系统中的出发点。

    fchdir函数向我们提供了一种完成此任务的便捷方法。在更换到文件系统各种的不同位置前,无需调用getcwd函数,而是使用open打开当前工作目录,然后保存其返回的文件描述符。当希望回到原工作目录时,只要简单地将该文件描述符传送给fchdir。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值