이번 시간에는 리눅스 환경에서 C언어 프로그래밍을 하는 법에 대해서 알아 보았습니다. C언어를 이용한 프로그래밍에는 여러 단계가 필요합니다.

첫 번째 단계는 텍스트 에디터를 이용해서 원시코드를 작성하는 단계입니다. 여러분이 흔히 보는 C언어 소스들이 이에 해당합니다. 윈도우 환경에서는 NotePad, EditPlus 등의 텍스트 에디터나 Turbo C, Visual Studio 등의 IDE(Integrated Development Environment )에서 제공하는 텍스트 에디터를 사용했습니다. 리눅스 환경에서 가장 많이 사용하는 에디터는 vi 에디터와 그 업그레이드 버젼이라고 할 수 있는 vim 에디터가 있습니다.


여기에서는 cat 과 리디렉션을 이용한 텍스트 파일을 만드는 방법을 사용하도록 하겠습니다. 리디렉션이란 “방향을 바꾼다.”라는 의미입니다. Cat 명령어는 파일의 내용은 터미널이나 콘솔로 출력하는, 즉 모니터로 출력해주는 명령어입니다. 하지만 리디렉션을 이용하여 출력 내용을 모니터가 아닌 파일로 저장 할 수가 있습니다.

$ cat > test.txt

위 명령어를 입력하게 되면, 일단 커서가 깜빡이며 입력을 대기 하게 됩니다. 내용을 입력해 넣고 마지막으로 [Ctrl] + D 를 누르면 내용이 test.txt 라는 파일로 저장이 됩니다. 이 때, 중요한 특성이 있습니다. 리디렉션 명령어 “>”는 무조건 덮어쓰기 모드로 동작을 하게 됩니다. 즉, 위 명령어를 입력하면 기존에 있던 test.txt 파일에 덮어 쓰게 되어 이전에 있던 내용은 모두 지워지게 됩니다. 이어쓰기 모드로 리디렉션을 하기 위해서는 “>>”을 이용하면 됩니다.  “>>”을 이용하면 기존에 있던 내용의 끝에서부터 이어 쓰기를 시작합니다. ( 즉, EOF 위치부터 내용이 추가 되기 시작합니다. )


 다음과 같은 명령어를 쳐서 C언어 프로그램을 만듭니다. ( 사실은 원시 소스코드를 만드는 것입니다. )

$ cat > program.c
int main(){
int a=10.b=20;
printf("10+20=%d",a+b);}

위 소스코드를 입력하신뒤 [Ctrl] + D 를 누르시면 화면에 출력되어야 할 내용들이 파일로 저장이 되어 C 파일을 만들었을 겁니다. ( 직접 ls 명령어를 사용하여 확인하셔도 됩니다. )
C언어를 배우신 분이나 프로그래밍 경험이 있으신 분이라면 쉽게 이해를 할 수 있는 소스코드입니다. ( 10과 20을 더하는 프로그램입니다. )


 이제 이 소스 파일을 목적 파일로 컴파일 해 보도록 하겠습니다. 소스파일을 목적 파일로 컴파일 하는 명령어는 다음과 같습니다. 


$ gcc -o 생성될파일 원시소스파일
[생성 될 파일에는 컴파일 후 생성될 목적파일( 실행파일 )의 경로와 이름을 지정해 주시면 되고, 원시소스파일은 컴파일이 될 파일의 경로를 적어주시면됩니다. 위에서는 program.c가 되겠습니다. ]

 gcc -o program.exe program.c 를 입력하여 위에서 작성한 소스파일인 program.c 를 목적 파일 program.exe로 컴파일 하도록 합니다. 아무런 추가 메시지가 뜨지 않는다면 컴파일은 성공적으로 끝난 것이 됩니다. ls를 사용하여 파일이 생성되었는지 확인합니다. 
 


 마지막으로 컴파일 한 파일을 실행하는 연습을 해 보도록하겠습니다. 이에는 상대경로와 절대 경로를 이용하는 방법 2가지가 있는데, 일단 절대 경로를 이용한 실행 방법은 만들어진 파일의 절대 경로를 입력하면 됩니다. 예를 들면 /home/trainer8/program.exe 를 입력하면 해당 파일이 실행됩니다.
 두번째로 상대경로를 이용한 실행 방법입니다. gcc를 이용하여 컴파일을 하는 경우는 대부분 현재 폴더에 컴파일 결과를 저장하게 됩니다. 현재 폴더에 있는 파일을 실행하기 위해서는 "./파일이름"을 입력하면됩니다. 위의 경우에는 ./program.exe 를 입력하면 됩니다. 이 때, "/"앞의 "."은 "현재"라는 의미입니다. 즉 ./program.exe는 현재 폴더의 program.exe 라는 의미입니다.

 리눅스에서 C언어를 이용하여 프로그래밍하고 컴파일하는 기초적인 방법에 대해서 배웠습니다. 앞으로 리눅스 환경에서 프로그래밍 경험을 많이 쌓아야 겠다는 생각이 드는 트레이닝이었습니다.



+ Recent posts