리눅스 에서 C언어라고 해서 윈도우에서 소스코딩을 하는 것과 별반 차이가 없다.


오히려 리눅스의 모든 시스템 프로그램들과 커널은 대부분 C언어로 이루어져 있다.


윈도우와 틀린 것이 있다면 리눅스는 C언어를 'GCC'라는 프로그램으로써 컴파일 해야 한다는 것이다. 하지만 이점으로써 오히려 컴파일에 있어서 더욱 자유로워 질수 있다고 필자는 말하고 싶다.


C언어는 프로그래밍의 가장 기초적이고 입문적이라고 할 수 있으나 세대적으로 따지자면 가장 구식 이라고도 볼 수 있을 것이다.


굳이 그 이유를 따지자면 영역 설정과 더불어 변수와 설정에 있어서 파이썬 아니 bash java 프로그래밍 보다는 까다 로운 것이 사실이기 때문이다.


하지만 현재의 프로그래밍 스크립트 방식은 대부분 그 형식을 c언어에서 따 온 것이 사실이다. 


그렇기에 C를 먼저 배운다면 대부분의 프로그래밍 스크립트 또한 이해가 빨라져 금방 습득 하기 마련이다.


그럼 본격적으로 C 언어 스크립트의 기초와 컴파일 과정을 알아 보도록 하자.


첫 번째로 만들 소스 파일은 많은 기초 교육을 담고 있는 숫자를 입력 받아 그것을 정수, 16진수, 8진수, 2진수로 재 출력 해주는 소스 코드 이다.


Source_File name : transn1.c

[Download_none]

Type : C

클립보드로 복사 → (본문 클릭)

무제


여기서 배울 것은


1. 주석문


/*  <- 주석의 시작


*/  <-주석의 종료 



2. 라이브러리 헤더 로드



#include <header.h>  < header.h 파일을 로드해 온다.> 



3. 본문의 시작


int main () {  <- 본문의 시작


<- 본문의 종료 


4. 기초 변수 선언


int a;  <- a 라는 이름의 변수 선언

int b[10];  <- b라는 이름의 변수를 10바이트 크기로써 선언

char c[]; <- c라는 이름의 변수를 문자형으로써 선언


5. 입력 받기 문


scanf("%d",a);   <- a 변수에 정수(%d)로써 사용자에게 입력을 받아 처리한다.



6. 출력 문


printf("hello and your number is %d",a);  <- "hello and your number is"라는 문자열과 함께 a변수에 지정된 값을 정수로써 출력 한다.


7.for 문 


for (a = 0; a < 5; a++)

{

printf("hello");

<- "hello"란 문자를 지정한 변수 a를 활용하여 0 - 5 총 5번을 반복 하겠끔 한다.


그렇다면 이제 본격적으로 코딩한 파일을 컴파일 해 보도록 하자.


먼저 위의 소스코드를 'transn1.c'로 저장한다.


-- 터미널 텍스트 박스 (Terminal text box) --

<Drag와 복사가 가능합니다.>

// tn1이라는 파일이름으로 만든 transn1.c파일을 컴파일을 시도 한다.


root@test:~$ gcc -o tn1 transn1.c


-> 아무런 메세지가 나오지 않으면 성공한 것이다.


root@test:~$ ./tn1

insert number:


-> 아무 숫자들을 입력해 보자.

343432
입력하신 값의 정수 표현은 343432
입력하신 값의 16진수로의 표현은 0x53d88
입력하신 값의 8진수로의 표현은 01236610
입력하신 값의 2진수로의 표현은 1010011110110001000입니다.


-> 프로그램이 계산 및 출력에 성공했다. 




도움이 되셨다면 '♡' 버튼을 꼭눌러 주시면 감사 하겠습니다.



파이썬에서 명령행의 필드를 인지하여 활용하는 방법에 대하여 알아 보도록 하자.

Bash에서 명령행의 필드를 인지할 때는 '$1(필드의 첫번째)'를 사용하면 되지만 파이썬 에서는 시스템 모듈과 'sys.argv[NUM]'명령을 활용해야 한다.

먼저 간단한 명령행 필드열1만 읽어 들여 간단하게 응용하는 파이썬 소스코딩 부터 해 보도록 하자. 


무제

Source_File name : tp1.py     |     [Download]    |     Type : Python         클립보드로 복사 → (본문 클릭)



그렇다면 이제 저장한 파이썬 파일을 '1' 과 함께 입력 했을때와 다른 것들을 입력했을때를 실행 테스트 해 보자.



// 실행 명령행에 1을 입력해 본다.


root@test:~$ python pb1.py 1

Good!



//  이번에는 다른 문자를 입력해 본다.



root@test:~$ python pb1.py test

Sorry you insert test


-> 입력한 'test'를 텍스트로 그대로 반환한다.




실행 및 테스트에 성공 하였다면 이번에는 명령행의 '필드열 1'과  '필드열 2'를 실행시 입력받아 둘의 숫자를 더하여서 출력하는 프로그램을 만들어 보자.


무제

Source_File name : tp2.py    |     [Download]    |     Type : Python         클립보드로 복사 → (본문 클릭)


테스트를 실시해 본다.



// 실행과 함께 명령행  필드에 두 가지 숫자를 입력한다.


root@test:~$ python tp2.py 3 5

3+5=

8

-> 입력한 각 필드의 출력과 함께 계산된 값이 출력 된다.




도움이 되셨다면 '♡' 버튼을 꼭 눌러 주시면 감사 하겠습니다.




리눅스에서 아주 쉬운 콘솔에서의 환경변수에 대해서 알아보자.

'환경변수' 라는 것은 그럴듯하게 어렵게 들릴수도 있겠지만 매우 쉬우며 어렵지 않다.

그냥 단순하게 환경의 조건을 정하는 것이다.

어떤 운영체제를 다룬다면 그 체제의 왕은 절대적으로 여러분이다.

그렇다. 여러분이 왕이 되어서 어떤 여러가지 문자를 함축적으로 정하는 것이다.

예를 들어,

"she=my love" 라고 정하고 싶다면 보통 프로그래밍 에서는 변수를 이렇게 설정한다.

she="my love"

그냥 바로 이거다. 이것이 변수라는 것이다.

얼마나 쉬운가?

여기에서 변수에 환경이란 말을 더하여 콘솔에서의 '환경변수'를 절대적으로 정한다고 한다면 터미널에 그저 'export'를 앞에 갖다 붙히기만 하면 되는 것이다.

자 그러면 터미널에서 그것을 한번 시험해 보도록 하자.




// 환경변수를 지정한다.


root@test:~$ export she="my love"



// 지정된 환경변수를 불러온다.


root@test:~$ echo $she

my love

-> 'she'에 대한 환경변수가 출력 되는데 성공했다.





보시는 바와 같이 "my love" 라는 글이 출력 되는 것을 볼 수가 있다.

그리고 중요한 것은 그것을 불러오는 명령에서 she 앞에 '$'를 붙였다는 것이다.
'$' 문자는 유닉스 시스템의 쉘 스크립트 에서 변수를 불러오는 매우 중요한 담당 역할을 하는 문자 이다.

하지만 이와 같은 단순한 환경변수 지정은 여러분이 연 그 터미널에서만 변수로 동작하며 다른 터미널 콘솔 에서는 변수로 지정 되지 않는다.

그렇다면 변수를 계속 유지되도록 전역설정을 하려면 어떻게해야 할까?

이는 '$/HOME/.bashrc' 파일에 해당 스크립트를 입력하여 처리가 가능하다.
($HOME = /home/user)


// 먼저 만일을 대비해서 bashrc의 백업을 만든다. (물론 부팅시를 기준으로 한 백업 파일인 '$HOME/.bashrc~'가 존재 한다.) 


root@test:~$ cp ~/.bashrc ~/.bashrc.bak



// .bashrc 파일에 추가할 환경변수를 삽입 한다.


root@test:~$ echo 'export she="my love"' >> ~/.bashrc



// 재부팅 할 필요 없이 '~/.bashrc' 파일의 소스를 로드한다.


root@test:~$ source ~/.bashrc



// 지정된 환경변수를 불러온다.


root@test:~$ echo $she

my love


-> 'she'에 대한 환경변수가 출력 되는데 성공했다.




이와 같은 환경변수는 전역 bash 프로그래밍에서 활용되며 여러 소프트웨어들이 이러한 환경변수를 활용한다.
대표적으로 많이 사용되는 환경변수들은 다음과 같다.

$HOME     사용자의 홈 디렉토리
$PATH     실행 파일 경로
$LANG     환경변수에 설정된 언어
$PWD         사용자의 현재 작업중인 디렉토리
$SECONDS     해당 콘솔이 실행된 경과를 초 단위 시간으로 나타냄
$SHLVL     사용되는 쉘 레벨
$SHELL     사용되는 쉘 이름($BASH와 같게 나옴.)
$PPID     부모 프로세스의 PID
$BASH     BASH 실행 파일 경로
$BASH_VERSION     설치된 BASH 버전
$MAIL     환경변수에 설정된 메일주소
$OSTYPE     운영체제 종류
$TERM     현재 사용되는 터미널 이름
$HOSTNAME     호스트 전체 이름
$HOSTTYPE     시스템의 아키텍처
$MACHTYPE     PC의 아키텍쳐와 운영체제표시
$LOGNAME     로그인 사용자 이름
$UID         사용자 UID
$EUID     su 명령에서 사용하는 사용자의 유효 아이디 값(UID와 EUID 값은 다를 수 있음)
$USER     사용자의 이름
$HISTFILE     history파일의 경로
$DISPLAY     현재 사용되는 X 디스플레이 이름

도움이 되셨다면 '♡' 버튼을 꼭눌러 주시면 감사 하겠습니다.


이 문제는 아주 기본적인 것이므로 상대방이 그래픽 드라이버 모듈을 운영체제에 설치하고 있을 경우 전혀 문제가 되지 않는다.


하지만 버쳐박스나 구형 커널을 사용하는 유저등 gtk구동 모듈을 가지고 있지 않은 경우가 있는데


예를 들어 아키텍쳐가 맞을경우...


실행 했을때 gtk오류가 날 경우는 " libqt4pas "가  없다는 메시지가 뜬다.


이 오류는 간단하게 소프트웨어 사용자가 직접 libqt4pas 소프트웨어를 찾아 설치하면 되는데 현재 최신이 버전은 'libqt4pas5'이다.


그렇기 때문에 만약을 대비하여 파스칼 gtk 개발자는 소프트웨어를 패키징 할때 debian/control 중 depends : 에 반드시 libqt4pas5를 적어 놓아야 바람직할 것이다.


물론 레파시토리에 등록된 소프트웨어일 경우 apt-get install 로써 depends의 패키지들이 동반 설치 될 것이지만


만약 소프트웨어 설치자(사용자)가 dpkg를 사용할 경우 depends는 설치 되지 않는다.


apt-get과 gdebi로서만 동반 설치 된다는 점을 명심해야 한다.





 

요즈음은 GTK 개발 작업을 파스칼로 하고 있다.


개발이 빠르고 빌드와 컴파일이 빠르기 때문이다.


한가지 단점이 있다면.. 기존의 C언어로서의 소스코드를 똑같이 제공하지 못한다는 점...


하지만 다른 상대방도 free pascal 소스코드만 있다면 어떤 아키텍쳐 에서도 리컴파일, 즉 리빌드가 가능하다.

(armhf에서도 가능하다.)


하지만 정작 중요한 것은 gtk를 개발할때 부딛히는 한가지 문제점은 프로그램 자체에서의 홈폴더에서의 데이타를 불러 오는 일이다.


물론 예를들어 홈폴더가 user일 경우


memo1.lines.loadfromfile('/home/user/')로서 지정하면 얼마든지 홈폴더의 데이터를 가져올수 있다.


그러나 정작 중요한 문제는 이것은 개발자 입장에서의 홈 폴더이지 배포 후 타인의 홈폴더는 될 수 없다.


또한 당연히 '~/' , '$USER' 등은 전부 먹히질 않는다.


이 문제를 해결 하기 위해 여러 포스팅들은 전부 읽어 봤지만 명확한 해결 방안이 없다는 것을 깨닫고는 본격적인 스스로의 답안 찾기에 들어갔다.


가장 중요한 이유는 파스칼 언어 자체에서 BASH를 지원하지 않기 때문이다.


그래서 가장 쉬운 돌려치기 방법은 인식이 가능한 기존의 FS(파일 시스템)를 이용한 방법인데 그냥 /tmp 나 /usr . /var등 기존의 디렉토리를 이용 하는 방법이다.


하지만 이것은 불러오기는 가능하지만 저장은 안 된다는 점이다.


원할하게 하려면 프로그램 사용자가 본 프로그램을 sudo 명령을 통해 실행해야만 한다.


하지만 사용자에게 안전하게 소프트웨어를 개발하려면 최대한 su명령 없이 소프트웨어를 사용할 수도록 만드는 것이 바람직 하다.


그래서 본 필자가 찾아낸 가장 이상적인 방법은 바로 홈 디렉터리의 심볼릭 링크를 상위 파일 시스템에 거는 것이었다.


물론 /tmp 폴더를 제외한 나머지 상위 폴더들은 sudo 명령이 있어야만 링크가 가능하다.


그러나 이 문제는 사용자가 처음 sudo 명령으로 소프트웨어를 설치할때 충분히 해결 할 수가 있다. (debian/postinst)


그리하여 이런 방식으로 하여금 예를 들어 /usr/share/program/home/ 등의 경로를 사용하여 파스칼 gtk 에서의 홈폴더에 대한 데이타 불러오기가 가능해 진다.





+ Recent posts