[#1] 맥으로 해보는 리눅스 프로그래밍

         



학생때 리눅스를 써본다~ 써본다 했었는데, 막상 리눅스를 설치해도 GUI가 너무 좋아서 윈도우 쓰는 느낌?? 이였습니다.(페도라를 설치했었음) 원래 커널을 사용해 보려고 했는데.. 막상 해보려니 윈도우처럼 되어있는 리눅스에서 뭘 해야하나.. 한참을 헤맨적도 있었고... 그렇게 커널화면만 한번 켜보고 리눅스를 지웠던 기억이....


취직을 해보니, 리눅스를 서버로 사용하는 회사가 많더군요. 윈도우 서버는 비싸니까;; 뭐 서버로써 리눅스가 좋은 점도 있긴 합니다만.. 윈도우보다는 불편하죠. 하지만 옛날에 이미 리눅스로 구축해놓은 서버를 윈도우로 바꾸는 작업도 어마어마하기 때문에 쉽게 바꾸지 못하는 것도 현실입니다. 따라서 자연스럽게 리눅스를 배워야 한다는 ^^...


이젠 정말 커널로 프로그래밍을 해보자!! 하고 리눅스를 설치하려고 했지만, 맥북프로에 리눅스를 설치하는 것이 부담부담.. (어렵기도 하고..) 


해서 그냥 맥 커널로 프로그래밍을 해보자!! 생각했습니다. 맥도 유닉스 기반이기때문에 왠만한 명령어는 리눅스랑 똑같더군요. 실제로 회사에서 리눅스 커널과 비교해보면서 하고 있는데 살짝 다른 부분이 몇개 있지만.. 거의 비슷합니다.


따라서 맥 커널로 리눅스 프로그래밍을 흉내내볼까~ 합니다 . 프로그래밍을 새로 배울때 가장 먼저하는 것은 역시 


Hello World!




일단 맥에서 커널을 띄웁니다. 맥에서는 터미널이라고 되어있네요. 

터미널이 꽁꽁 숨어있을 수도 있는데, 런치패드에 기타폴더를 가보시면 아마 있을겁니다.(기본설정..)


터미널창에서 이제 텍스트 편집기를 열어야합니다. 리눅스에서는 보통 vi에디터를 사용합니다. 

커널에서 vi [파일이름]을 입력하면 파일이름으로 문서를 생성할 수 있습니다.




저는 hello.c 라는 이름으로 만들도록 하겠습니다.




위의 화면이 바로 vi에디터입니다. 윈도우로 따지자면 워드패드 같은 프로그램이죠. 하지만 마우스를 사용하는 프로그램이 아니라 커널 기반 프로그램이기 때문에 사용법이 다소 어렵습니다.(처음하는 사람에겐...)


일단 키보드로 움직이기는 하는데 입력할 수가 없죠. 입력모드로 바꿔주기위해 i를 누르면 됩니다. 그럼 아래 INSERT MODE라고 글씨가 뜨고, 입력이 가능해집니다.


이 밖에도 vi에는 여러가지 명령어가 있습니다. 제가 자주 사용하는 건 입력 i, 줄삭제 dd, 검색 /, 단어삭제 dw, 저장 :w, 종료 :q 정도가 있네요. 사용하시다보면 저절로 암기가 됩니다. ㅎ_ㅎ


보다 자세한 명령어들은 구글링 ㄱㄱ

이제 바로 코딩을 해보도록 하겠습니다.




짠 .. 이렇게 대충~ 코딩을 하고.. 리턴값도 없는 main함수를 보며.... :wq를 눌러줍니다. (저장후 종료)




자 이제 ls (파일 리스트출력) 명령어를 처보면 hello.c파일이 생성된걸 알 수 있습니다. 이제 컴파일을 해야겠져?


리눅스에는 기본적으로 gcc가 내장되어있습니다. 컴파일은 보통 gcc -c hello.c  를 하게되면 hello.o라는 오브젝트파일을 만들고, gcc -o hello hello.o 를 통해 실행파일을 만들 수 있습니다. 이 과정을 간단히 해서 gcc -o [실행파일이름] [컴파일할 c문서] 를 입력하면 됩니다. 


저는 hello.c 이기 때문에 gcc -o hello hello.c 를 입력하겠습니다. 그러면 hello라는 실행파일이 생성됩니다.




이제 실행파일을 실행하면 됩니다. 간단히 실행파일 이름만 입력하면 됩니다.




원래 리눅스에서는 hello만 치면 됬었는데,,, 맥에서는 인식을 못하네요. 경로를 확실히 지정해줘야 하나봅니다. hello는 현제 폴더에 있기 때문에 ./hello를 치면 Hello World가 실행되는 것을 볼 수 있습니다.


자 이제 커널에서 C 프로그래밍 하는법을 대충 아셨을겁니다.


먼저  vi 에디터로 c문서를 만들고, gcc를 이용해 컴파일, 실행 순으로 하시면 됩니다.


자 다음번 포스팅에서는 소켓통신을 하는 프로그램을 만들어보겠습니다.

댓글(2)

  • 1212
    2016.10.13 00:51

    감사합니다.
    쉽게 따라했네요~

  • ㅁㄴㅇㄹ
    2019.09.18 15:48

    이건 커널 프로그래밍이 아니라 그냥 터미널(콘솔)에서 gcc로 컴파일하는 겁니다. 커널 ≠ 터미널

Designed by JB FACTORY