터미널에서 사용하는 cd(change directory)와 pwd(print working directory)에 해당하는 명령어를 C에서도 사용하려면

Unix 기반 컴파일러(ex. gcc)는 unistd.h라는 헤더 파일을 include하면 되고,

Microsoft 기반 컴파일러(ex. Visual C++)는 direct.h라는 헤더 파일을 include하면 된다.


#include <unistd.h> // for Unix

#include <direct.h> // for Windows


cd에 대응되는 C언어 함수는 chdir(unistd.h)와 _chdir(direct.h)이고,

pwd에 대응되는 C언어 함수는 getcwd(unistd.h)와 _getcwd(direct.h)이다.


편의상 unistd.h를 include한다는 전제로 설명한다.

Visual C++에서는 아래의 과정에서 unistd.h 대신 direct.hchdir 대신 _chdir, getcwd 대신 _getcwd를 쓰면 된다.








1. chdir


c 파일이 있는 경로에서 test_folder라는 폴더로 이동하는 걸 생각해보자.

터미널에서는 아래의 명령어로 가능하다.


$ cd test_folder


이에 대응되는 c 코드는 다음과 같다.


chdir("test_folder");








2. getcwd


위의 chdir가 실제로 이동했는지 확인하려면 이동 전 주소와 이동 후 주소를 print해서 비교해볼 수 있다.

현재 디렉토리 주소를 저장하기 위해 다음과 같은 cwd란 char 변수를 선언한다.


 char cwd[1024];


이동 전 디렉토리 주소를 변수 cwd에 지정한 뒤 출력한다.


getcwd(cwd, sizeof(cwd));

printf("%s\n",cwd);


위의 chdir을 이용해 test_folder로 이동한다.


chdir("test_folder");


이동 후 디렉토리 주소를 cwd에 지정한 뒤 출력한다.


getcwd(cwd, sizeof(cwd));

printf("%s\n",cwd);




위 과정을 담은 test.c 코드와 실행 결과는 다음과 같다.


// test.c
#include <stdio.h>
#include <unistd.h>

int main()
{
    char cwd[1024];
    getcwd(cwd, sizeof(cwd));
    printf("%s\n",cwd);
    chdir("test_folder");
    getcwd(cwd, sizeof(cwd));
    printf("%s\n",cwd);

    return 0;
}


위의 test.c 실행 결과


Visual C++에서 사용할 수 있는 test_win.c 코드와 실행 결과는 다음과 같다.


// test_win.c
#include <stdio.h>
#include <direct.h>

int main()
{
    char cwd[1024];
    _getcwd(cwd, sizeof(cwd));
    printf("%s\n",cwd);
    _chdir("test_folder");
    _getcwd(cwd, sizeof(cwd));
    printf("%s\n",cwd);

    return 0;
}


위의 test_win.c의 실행 결과








Reference)

https://stackoverflow.com/questions/16285623/pwd-to-get-path-to-the-current-file

http://www.manpagez.com/man/2/chdir/

http://www.manpagez.com/man/3/getcwd/

https://msdn.microsoft.com/en-us/library/bf7fwze1.aspx

https://msdn.microsoft.com/en-us/library/sf98bd4y.aspx




'Programming > C' 카테고리의 다른 글

Visual C++을 command line으로 사용하기  (0) 2017.09.11
Sorting Algorithms Animations  (0) 2016.12.25
Windows에서 gcc 설치하기  (2) 2016.12.25
Intel MKL 설정하기  (0) 2016.11.28
OS X에서 gcc로 Open MPI 설행하기  (0) 2016.11.15

+ Recent posts