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; if(chdir(“/devis/wangchenglin”)《0) err_sys(“chdir failed”); ptr=path_alloc(&size);if(getcwd(ptr,size)==NULL) err_sys(“getcwd failed”); printf(“cwd=%s\n”,ptr);exit(0); } |