getcwd(3)

#include <unistd.h>

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

현재 작업 디렉토리의 full path명을 null-terminated 문자열로 얻습니다. 현재 작업 디렉토리를 저장할 buf의 크기(size)가 작으면  NULL을 return하며, errno에 ERANGE가 설정됩니다. 만약 buf를 NULL로 설정하면 malloc(3)을 통해서 할당된 메모리에 작업디렉토리를 저장하여 return합니다. 따라서 free(3)를 호출하여 메모리 해제를 해줘야 합니다.

 

 

파라미터

buf
   - 현재 작업 디렉토리를 저장할 buffer.
   - buf가 NULL이면 getcwd(3)는 malloc(3)을 통해서 메모리를 할당한 후에 작업디렉토리명을 
     문자열로 return합니다.
   - 이 경우에는 반드시 free(3)를 통하여 메모리를 해제해야 합니다. 
size
    - buffer에 할당된 메모리의 크기.

 

RETURN

NULL 아님
    - 정상적으로 현재 작업 디렉토리를 얻어왔습니다.


NULL
    - 현재 작업 디렉토리 정보를 얻는 데, 실패하였습니다.. 상세 오류 내용은 errno에 저장됩니다.

 EACCES : path 구성 중의 디렉토리에 search 권한이 없음.
 EFAULT : buf의 메모리가 bad 주소영역임.
 EINVAL : buf가 NULL이 아닌데, size가 0임.
 ELOOP  : symbolic link가 순환 link가 존재함.
 ENAMETOOLONG : Full Path명{PATH_MAX}이 너무 길거나 한 디렉토리명{NAME_MAX}이 너무김.
 ENOENT : 현재 작업 디렉토리가 unlink됨.
 ERANGE : 작업디렉토리를 저장할 buf의 size가 적게 잡힘. (null-terminate 값 포함)

 


활용 예제

 

Sample

#include <unistd.h>
#include <sdtio.h>

char path[1024];

......

if(getcwd(path, 1024) == NULL) {
    fprintf(stderr, "current working directory get error: %s\n", strerror(errno));
    return -1;
}

 


see also :  Directory 정보 조회 및 관리 Library 

 

 

블로그 이미지

사용자 자연&사람

행복한 개발자 programmer since 1995.

댓글을 달아 주세요