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

先查看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.

view plain #include"apue.h"

int main(void)

{ if(chdir("/devis/wangchenglin")<0)

err_sys("chdir failed");printf("chdir to /devis/wangchenglin succeededn");exit(0);



view plain #include<unistd.h>

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

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:

view plain 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;}

view plain #include "apue.h" char*path_alloc(int* size) { char *p = NULL; if(!size) return NULL; p = malloc(256); if(p) *size = 256; else *size = 0; return p; } int main(void)

{ char * ptr;int size;


err_sys("chdir  failed");


err_sys("getcwd failed");



崔哲博客本文短连接地址 : https://xn--xwr12q.xn--fiqs8s/Ziadk