프로그래밍을 하다가 보면 문자열을 붙이고자 할떄가 있다.

이때 사용하는 함수가 Strcat이다.


Strcat(result,buf);


=>buf에 있는 값을 result와 합쳐 result에 저장한다.


ex)

#include<stdio.h>

#include<string.h>


int main(int argc,char *argv[]){

        int size;

        char buf[]="HI~";

        char buf1[]="taesun1114 blog's";


        printf("buf : %s\nbuf1 :%s\n",buf,buf1);

        strcat(buf,buf1);

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


        return 0;

}

다만, 주의할 것이 있는데 합쳐진 buf의 size는 달라지지 않는다.


#include<stdio.h>

#include<string.h>


int main(int argc,char *argv[]){

        int size;

        char buf[]="HI~";

        char buf1[]="taesun1114 blog's";


        printf("buf : %s\nbuf1 :%s\n",buf,buf1);

        printf("buf size : %d\n",sizeof(buf));

        strcat(buf,buf1);

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

        printf("changed buf size:%d\n",sizeof(buf));


        return 0;

}




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

열거형 enum  (0) 2012.07.09
sscanf , sprintf  (0) 2012.07.06
Strtok 문자열 자르기  (0) 2012.06.29
Extern 함수  (0) 2012.05.21
함수 포인터  (0) 2012.05.07

#include<string.h>


strtok(*string,"구분자");


strtok는 인자로 다음과 같이 어떤 '문자열' 과 '구분자' 를 받아서 그 구분자를 기준으로 토큰을 리턴하는 함수이다.


ex)

#include<stdio.h>

#include<string.h>


int main(int argc,char *argv[])

{

        char *pointer=NULL;


        pointer = strtok(argv[1],"~");

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

        pointer = strtok(NULL,"/");

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


        return 0;

}





단, strtok함수를 쓸때는 주의할 점이 있는데, 처음에 strtok함수를 사용하고 나면, strtok함수가 구분자를 만나면 구분자를 NULL바꿔버리고 그 자리의 주소를 기억하고 있는다. 따라서 다음번에 다시 strtok를 사용할 떄는 argv[1]이 아니고, NULL을 해야 처음에 잘라낸 부분 뒤부터 구분자를  찾는 것이다. 그렇지 않을 경우에는 계속 처음부터 검색을 하게 됨.


#include<stdio.h>

#include<string.h>


int main(int argc,char *argv[])

{

        char *pointer=NULL;


        pointer = strtok(argv[1],"~");

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

        printf("%s\n",argv[1]);

        pointer = strtok(NULL,"/");

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


        return 0;

}


strtok함수를 사용하고 난후에 다시 argv[1]을 출력하면 ~가 NULL로 바뀌어 hi까지만 출력이 된다.


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

열거형 enum  (0) 2012.07.09
sscanf , sprintf  (0) 2012.07.06
문자열 붙이기 Strcat()  (0) 2012.07.04
Extern 함수  (0) 2012.05.21
함수 포인터  (0) 2012.05.07

간단한 Tip!!


리눅스에서 맥어드레스를 바꾸고 싶을때 사용해보자.


일단 ifconfig로 자신의 맥 어드레스를 확인한다.





맥 어드레스를 변경할때는 인터넷을 잠시 내려두고 작업해야 한다.


차례대로 ifconfig eth0 down을 이용해서 인터넷 서비스를 중지시키고, 


ifconfig eth0 hw ether Mac_address

를 하여 원하는 맥주소로 변경한 후에 ifconfig eth0 up으로 인터넷을 다시 서비스 시킨다.


다시 ifconfig를 사용하면, 맥주소가 바뀐것을 확인할 수 있으나,

인터넷은 사용이 불가능하다 ㅋㅋㅋ


왜냐하면 저는 공유기를 사용하는데 , 공유기에는 dhcp기능이 있다.

 이 기능을 무시하고 임의로 사용자가 ip 등을 새로이 설정하게 될 경우


dhcp와의 충돌로 인하여 제기능을 발휘하지 못하기 때문에 인터넷을 사용할 수가 없게 됩니다.

그 이유는 공유기에 이미 다른 아이피가 등록되어 있는데 임의대로 아이피를 바꾸면 인식을 하지 못하기 때문에 인터넷을 할 수 가 없다.

정히 수동으로 설정하고 싶으시면 공유기의 기능중 dhcp기능을 해제하면 된다.


'System > Linux' 카테고리의 다른 글

리눅스 core file  (0) 2013.03.18
nohup  (0) 2013.03.18
리눅스 tee 명령어  (0) 2013.03.14
프로세스 종료 프로그램  (0) 2012.07.19
Linux 디렉토리 구조  (0) 2012.06.07

case 변수 in

value1)

명령

;;

value2)

명령

;;

*)

명령

;;


ex)

#!/bin/sh


echo "색깔을 입력해주세요"

read color


case $color in

[Gg]reen)

        echo "green~!!"

;;

blue)

        echo "blue~!!"

;;

*)

        echo "defualt:/"

;;

esac



변수를 설정할때는 그냥사용하고 출력이나 연산이 필요한 곳, 변수를 호출할때는 $를 붙여준다.


ex)

VAR="Hello Shell"

echo $VAR



변수는 기본적으로 문자열을 받는다.

따라서 정수형변수를 선언할때는 delcare -i명령을 사용한다.


정수형이라 문자를 입력하면 디폴트값인 0이 출력된다. 또한 정수형이기때문에 실수는 입력을 받지 못함.

함수로 쉘 코드의 섹션을 정의할 수 있으며 이름을 정할 수 있다. 이름을 실행하면 함수호출이 된다.


function_name(){

block of code

}


ex)


#!/bin/sh


lister(){

echo "$STR"

echo "현디렉토리 위치 `pwd`"

}


STR="Hello World"

lister



함수안에서 값을 이용해야할때는 함수밖의 변수를 쓰면 값을 가져온다.

C언어처럼 lister(STR)이런식으로 하지 않아도 되요.

while loop


while <test-com> do <coms> done


test-com 이 true일때 do ,done사이의 문장을 실행한다.


ex)


#!/bin/sh


number=0

while [ number -lt 10 ]

do

echo "$number"

number=`expr $number + 1`

done

echo "done.."




for loop


for <loop-index> in <arg-list> do <coms> done


ex)


#!/bin/sh


for number in 1 2 3 4 5 

do

echo $number

done

echo "done.."




kernel module이란


커널에 동적으로 삽입,삭제할 수 있는 코드들의 묶음을 말한다.

모듈을 사용하는 이유는, 커널에 코드를 삽입하려면 코드를 삽입한 후에 컴파일을 한후에 재부팅을 해야 한다. 하지만 모듈을 사용한다면, insmod명령어 한 줄로 간단하게 코드를 삽입 시킬 수 있다.


lsmod : 현재 사용중인 모듈을 보여주는 명령어이다.



insmod : 모듈을 삽입하는 명령어.


rmmod : 모듈을 삭제한다.


모듈을 빌드 하기 위해서는 .c 파일과 함께 makefile도 만들어 주어야 한다.


KERNELDIR 에는 커널소스의 generic 헤더가 들어가야 하기 때문에, 현재 커널버전에 맞는 정확한 심볼릭 링크를 가지고 있는 build로 링크를 걸어준다.

obj-m 은 타겟이 되는 소스파일을 가르키는 것. 하나일때는 .o로 사용해도 상관없지만, 2,3개 이상일때는

모듈이름.objs := 1.c 2.c 와 같이 해주어야 함.

default 와 clean 밑에 명령어를 작성할때는 항상 탭을 해주어야 함.

저장한 후에 Makefile이 있는 곳에서 Make명령어를 실행시킨다.



QM_MODULES: Function not implemented 


라는 메세지는 모듈 기능을 지원하지 않게 커널이 빌드되어 있기 때문에 발생한다.

Make menuconfig에서 설정을 바꿔주면 된다.

'System > Kernel' 카테고리의 다른 글

Kernel 빌드 과정  (0) 2012.06.05

 

 

1. /

최상위 디렉토리로 출발점이 된다.

 

2. boot

부팅에 필요한 커널과, 핵심파일이 들어있다.

 

3. bin

슈퍼유저(root) + 일반 유저 가 사용할 수 있는 명령어가 들어있다.

 

4. sbin

슈퍼유저(root)용 명령어가 들어있다.

 

5. dev

일종의 장치관리자.

 

6. /usr/local/bin

Linux가 설치된 이후의 프로그램 명령어 모음

 

7. root

root 홈디렉토리

 

8.lib

시스템 운영 및 프로그램을 구동할 때 필요한 공유 라이브러리

'System > Linux' 카테고리의 다른 글

리눅스 core file  (0) 2013.03.18
nohup  (0) 2013.03.18
리눅스 tee 명령어  (0) 2013.03.14
프로세스 종료 프로그램  (0) 2012.07.19
Mac Address 바꾸기  (0) 2012.06.28

 

커널 2.4버전에 해당.

2.6이상부터는

[make dep] - [make clean] - [make bzImage] - [make modules] 를 make로 통합시킴.

 

tar.bz2 압축해제 방법:

 

1. tar xvfj *.tar.bz2

 

2. bzip2 -d *.tar.bz2

   tar xvf *.tar

j명령어를 사용하면 압축을 풀 소스가 bzip2로 압축된 것을 먼저 풀라는 뜻이다.

 

Kernel 2.4.27  버전에서 2.6.14.6  버전을 빌드하려했으나 자꾸 에러먹고 2.4.32 버전을 깐 후에 까니까 언제그랬냐는 듯이 잘 돌아간다. 왜그런지는 좀 찾아봐야할듯 ㅠㅠ

 

'System > Kernel' 카테고리의 다른 글

Kernel module ?  (0) 2012.06.07

+ Recent posts