unix环境高级编程-chdir、fchdir和getcwd函数。

转载 2012年03月21日 22:13:19

转载:出处不明

#include<unistd.h> 
int chdir(const char* pathname); 
int fchdir(int filedes); 

每个进程都有一个当前的工作目录,此目录是搜索所有相对路径的起点。

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

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



这两个函数分别用文件名和文件描述符来制定新的工作目录。

先查看GNU C手册。



int chdir (const char *filename) [Function]
This function is used to set the process’s working directory to filename.
The normal, successful return value from chdir is 0. A value of -1 is returned to
indicate an error. The errno error conditions defined for this function are the usual
file name syntax errors (see Section 11.2.3 [File Name Errors], page 224), plus ENOTDIR
if the file filename is not a directory.
int fchdir (int filedes) [Function]
This function is used to set the process’s working directory to directory associated
with the file descriptor filedes.
The normal, successful return value from fchdir is 0. A value of -1 is returned to
indicate an error. The following errno error conditions are defined for this function:
EACCES Read permission is denied for the directory named by dirname.
EBADF The filedes argument is not a valid file descriptor.
ENOTDIR The file descriptor filedes is not associated with a directory.
EINTR The function call was interrupt by a signal.



实例;

#include"apue.h" 

int main(void) 
{ 
if(chdir("/devis/wangchenglin")<0) 
err_sys("chdir failed"); 
printf("chdir to /devis/wangchenglin succeeded\n"); 
exit(0); 


} 


运行结果:



看到并没有改变工作目录,这是因为shell创建了一个子进程,又该自己子进程执行这个命令。可知,为了改变shell进程自己的工作目录,shell应该直接调用chdir函数,为此cd命令的执行程序直接包含在shell程序中。

函数getcwd这样的功能,它从当前工作目录(.目录项开始),用..目录项找到其上一级的目录,然后赌气目录项,知道该目录项中的i节点编号与工作目录i节点编号相同,这就就找到了其对应文件名。按照这种方法,组成上一,直到遇到跟。

#include<unistd.h> 

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


向此函数传递两个参数,一个是缓冲地址buf,领个是缓冲长度size。缓冲必须有足够长度以容纳绝对路径名再加上一个null终止符,否则返回出错。

char * getcwd (char *buffer, size t size) [Function]
The getcwd function returns an absolute file name representing the current working
directory, storing it in the character array buffer that you provide. The size argument
is how you tell the system the allocation size of buffer.
The GNU library version of this function also permits you to specify a null pointer for
the buffer argument. Then getcwd allocates a buffer automatically, as with malloc
(see Section 3.2.2 [Unconstrained Allocation], page 33). If the size is greater than
zero, then the buffer is that large; otherwise, the buffer is as large as necessary to
hold the result.
The return value is buffer on success and a null pointer on failure. The following
errno error conditions are defined for this function:
EINVAL The size argument is zero and buffer is not a null pointer.
ERANGE The size argument is less than the length of the working directory name.
You need to allocate a bigger array and try again.
EACCES Permission to read or search a component of the file name was denied.
You could implement the behavior of GNU’s getcwd (NULL, 0) using only the standard
behavior of getcwd:

char * 
gnu_getcwd () 
{ 
size_t size = 100; 

while (1) 
{ 
char *buffer = (char *) xmalloc (size); 
if (getcwd (buffer, size) == buffer) 
return buffer; 
free (buffer); 
if (errno != ERANGE) 
return 0; 
size *= 2; 
} 
}

 

相关文章推荐

unix环境高级编程-chdir、fchdir和getcwd函数。

每个进程都有一个当前的工作目录,此目录是搜索所有相对路径的起点。 进程通过调用chdir或fcdir函数可以更改当前工作目录。 进程通过调用chdir或者fchdir函数可以更改当前工作目录。 ...

chdir、fchdir 和 getcwd 函数

一、    每个进程都有一个当前工作目录,此目录是搜索所有相对路径名的起点(不以斜杠开始的路径名为相对路径名)。当用户登录到 *NIX 系统时,其当前工作目录通常是口令文件(/etc/pas...
  • SF_min
  • SF_min
  • 2011年05月20日 11:34
  • 5835

4.22 chdir、fchdir和getcwd函数-当前工作目录

虽然《Unix环境高级编程》一书把chdir和fchdir函数放到文件管理这部分来讲,但严格讲这两个函数不属于文件系统管理的函数,应该属于进程管理的函数。这两个函数用于改变进程的当前工作目录,而进程的...

UNIX环境高级编程学习笔记(二)文件I/O常用函数

不带缓冲I/O

unix环境高级编程-4.7-access函数

如前所述,当用open函数打开一个文件的时候,内核以进程的有效用户ID和有效组ID,为基础执行期访问权限测试。有时候,进程也希望按期实际用户ID,和实际组ID,来测试访问能力。 access函数是按...

unix环境高级编程-4.9-chmod,fchmod函数和粘住位

这两个函数可以更改我们现有文件的访问权限。 #include int chmod(const char *pathname,mode_t mode); int fchmod(int filed...

unix环境高级编程-4.8-umask函数

自此我们已经说明了每个文件相关联的9个访问权限位。在此基础上,我们可以说明与每个进程相关联的文件模式创新屏蔽字。 umask函数为进程设置文件模式创建屏蔽字,并返回以前的值。 #include ...

unix环境高级编程-4.11-chown,fchown和lchown函数

接下来讲的函数主要是用来更改文件的用户ID和,组ID。 #include int chown(const char* pathname,uid_t owner,gid_t group); in...

《unix环境高级编程》第八章 关于几个函数的区别(wait()与 waitpid())

作者:pianpianboy 出处:翩翩男孩blog 前言:    本文只是自己在读《unix环境高级编程》时的一些感悟,加上本人初涉计算机领域,水平有限,如有不对的地方希望大家指正! ...

《UNIX环境高级编程》笔记--sync、fsync和fdatasync函数

传统的UNIX实现在内核中设有缓冲区高速缓存或页面高速缓存,大多数磁盘 I/O都通过缓冲进行。当将数据写入文件时,内核通常先将该数据复制到其中一个缓冲区中,如果该缓冲区尚未写满,则并不将其排入输出队列...
  • TODD911
  • TODD911
  • 2013年09月15日 10:13
  • 2188
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:unix环境高级编程-chdir、fchdir和getcwd函数。
举报原因:
原因补充:

(最多只允许输入30个字)