터미널에서 사용하는 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




Visual Studio를 주로 사용하지 않아 확신하진 못하지만, VS에서 c 파일을 실행하려면 항상 프로젝트를 사용해야만 가능했다.

프로젝트를 매번 생성(혹은 지정)하는 것이 귀찮기도 하고 VS IDE를 실행하지 않으면서

Visual C++(Visual C라는 건 없다)로 컴파일을 할 수 있는 방법을 찾다가

cmd에서 command line으로 Visual C++을 컴파일하는 방법을 찾았다.


아래의 기준으로 설명한다.

- Visual Studio 2015 Community







1. test.c 생성


우선, 테스트용 c 파일인 test.c를 생성한다.

코드는 다음과 같다.


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

int main()
{
    #ifdef _MSC_VER
        printf("Microsoft Visual C++ Compiler\n");
    #else
        printf("Other Compiler\n");
    #endif

    return 0;
}


Visual C++로 컴파일해서 실행하면 Microsoft Visual C++ Compiler가 나올 거고,

다른 컴파일러로 컴파일해서 실행하면 Other Compiler가 나올 거다.








2. 환경 변수 설정


command line에서 Visual C++을 컴파일하기 위해 필요한 환경 변수가 들어가 있는 vsvars32.bat 혹은 vcvarsall.bat을 cmd에서 실행한다.

vsvars32.bat은 32비트를 위한 환경 변수이고, vsvarsall.bat은 뒤에 인수를 어떻게 붙이느냐에 따라 달라진다.

(ex. vsvars32.batvsvarsall.bat x86과 같다)

vsvarsall.bat에 관해서는 2번째 Reference를 참고하면 된다.


vsvars32.bat은 아래의 경로에 있다.


C:\Program Files (x86)\<Microsoft Visual Studio Version>\Common7\Tools


vcvarsall.bat은 아래의 경로에 있다.


C:\Program Files (x86)\<Microsoft Visual Studio Version>\VC


<Microsoft Visual Studio Version>은 Visual Studio 버전에 따른 폴더명이다.

현재 내 환경에서는 Microsoft Visual Studio 14.0이다.








3. 컴파일 및 실행


test.c가 있는 경로로 이동한 뒤 다음의 명령어를 cmd에 입력해 컴파일을 진행한다.


$ cl test.c


위의 환경 변수 설정을 하지 않으면 다음과 같은 에러가 발생한다.


환경 변수 설정을 하지 않고 실행한 결과


그 다음 생성된 test.exe를 실행한 뒤 제대로 실행이 되는지 확인한다.

정상적으로 실행이 됐다면 Microsoft Visual C++ Compiler라는 문구가 뜬다.


$ test.exe


환경 변수 설정을 한 뒤 실행한 결과


앞서 test.c 생성에서 설명했듯 다른 컴파일러(ex. gcc)를 사용하면 Other Compiler라는 문구가 뜬다.


gcc로 컴파일을 한 결과








Reference)

https://msdn.microsoft.com/ko-kr/library/bb384838.aspx

https://msdn.microsoft.com/ko-kr/library/f2ccy3wt.aspx




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

C에서 cd, pwd 명령어 사용하기  (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




[X_sort, X_ind] = sort(X, num, direction)


Input)

X

: 벡터 혹은 행렬 데이터

num = 1 or 2 (default = 1)

: X가 행렬일 때 1이면 열을 기준으로, 2면 행을 기준으로 정렬한다. 

direction = 'ascend' or 'descend' (default = 'ascend')

: 정렬 기준을 정한다. ascend는 오름차순, descend는 내림차순이다.


Output)

X_sort

: 정렬한 X의 값이다.

X_ind

: 정렬한 X의 순서를 의미한다.



X가 벡터일 경우 다음은 참이다.


X_sort == X(X_ind)


X가 행렬이고 num = 1이면 j열에 대하여 다음은 참이다.


X_sort(:,j) == X(X_ind(:,j),j)


X가 행렬이고 num = 2이면 i행에 대하여 다음은 참이다.


X_sort(i,:) == X(i,X_ind(i,:))




Reference)

https://kr.mathworks.com/help/matlab/ref/sort.html




+ Recent posts