반응형

<플러그인 설치>

1. Help > Install New Software

2. Add

3. Location 항목에 http://jd.benow.ca/jd-eclipse/update 입력하고 "OK"

 

4. Java Decompiler Eclipse Plug-in 설치

 

5. Restart Eclipse

 

<사용법>

사용법은 간단합니다.

열어보고 싶은 jar 파일에 있는 .class 파일을 더블클릭하면 소스가 나타납니다.

반응형
반응형

안드로이드 App을 개발할 때도, Android 프레임워크의 소스를 봐야 하거나 디버깅을 위해 Breakpoint를 찍어 보고 싶은 때가 있다.

App개발자가 안드로이드 Full Source를 이용하여 디버깅하는 방법을 알아보자.

 

1. classpath 파일을 android FW소스의 root에 복사 한다.

android_src\development\ide\eclipse\.classpath => android_src\.classpath

 

2. 이클립스에 Android FW소스로 Java Project를 설정

Eclipse : File->new->Java project

 

3. FW에 디버깅을 위한 셋팅을 한다.

생성된 java프로젝트에서 마우스 우클릭하여 Debug Configuration 설정

마우스 우클릭->Debug as->Debug configuration->Remote Java Application->new

Port는 8700

 

에러가 나는데 그냥 "OK"하면 된다.

 

3. 테스트를 위해 "HelloWorld" 라는 Android를 생성하였다.

App Project의 Properties 에서FW 소스의 위치를 설정.

Java Build Path->Libraries->Android x.x->Edit->External Folder 에서 Android Framework의 Full Source가 있는 폴더를 지정.

 

4. 디버깅을 위한 준비작업은 끝났다.

디버깅를 해보면 프레임워크에 Break Point가 걸리기도 하고 잘 안걸리기도 한다.

이 부분은 아마 제조사에서 Android Source를 그대로 사용하지 않고, 수정을 하기 때문에 라인이나 소스가 달라서 발생을 하는 것이다.

그렇다고 하더라도 일부분의 소스가 동기가 맞아 BP가 가능하고, FW내부의 변수에 대한 값을 볼 수 있어 디버깅의 폭이 넓어진다.

 

반응형

'SW개발' 카테고리의 다른 글

[Android L 개발 관련 리뷰]  (0) 2014.10.02
[KIKAT에서 ART 테스트]  (0) 2014.09.30
[JSON 온라인 뷰어]  (0) 2014.09.29
[Android : 메소드 프로파일링]  (0) 2014.04.24
[Eclipse에서 class 파일 소스 보기]  (1) 2014.04.23
[Android 통합로그]  (0) 2014.03.01
[unmappable character for encoding UTF-8]  (0) 2014.01.04
[Android Contact DB 확인하기]  (0) 2013.10.31
[Android, Activity/Receiver/Service]  (0) 2013.10.29
[SMS TPDU field]  (0) 2013.05.07
반응형

안드로이드를 개발 할 때 가장 많이 보는 것 중에 하나가 로그일 것이다.

로그는 옵션에 따라 여러가지가 있는데, 이들은 서로 연관성이 많음에도 불구하고 따로 로그가 생성되어 불편함이 있다.

Android 개발자라면 알고 있는데, -b옵션을 이용하여 각각의 로그를 받을 수 있다.

 

-b main : 옵션이 없으면 Default로 나오는 로그, App에서 나오는 로그

-b radio : Radio(Call, SMS, Network, etc) 관련 로그

-b events : event관련 로그

-b system : Android Framework관련 로그

 

이를 cygwin에 있는 tee를 이용하여 로그를 보면서 하나의 파일에 모두 담아 보자.

 

1. Cygwin을 설치한다. 이 때 tee를 포함한다.(보통은 기본적으로 선택되어 있다.)

- http://cygwin.com 에서 다운로드를 받을 수 있다.

(설치과정 생략)

 

2. 설치된 cygwin의 bin 폴더를 path에 추가한다.

 

3.아래와 같이 명령어를 이용하여 통합된 로그를 볼 수 있으며, 로그는 my_log.txt에 저장된다.

- adb logcat -v time -b main -b radio -b events -b system 2>&1|tee my_log.txt

 


반응형

'SW개발' 카테고리의 다른 글

[KIKAT에서 ART 테스트]  (0) 2014.09.30
[JSON 온라인 뷰어]  (0) 2014.09.29
[Android : 메소드 프로파일링]  (0) 2014.04.24
[Eclipse에서 class 파일 소스 보기]  (1) 2014.04.23
[Android Framwork소스를 이용한 디버깅]  (2) 2014.03.03
[unmappable character for encoding UTF-8]  (0) 2014.01.04
[Android Contact DB 확인하기]  (0) 2013.10.31
[Android, Activity/Receiver/Service]  (0) 2013.10.29
[SMS TPDU field]  (0) 2013.05.07
[Java Script문법]  (0) 2013.03.23
반응형

Ant 빌드를 하다가 UTF-8의 포맷의 Character를 사용한 경우에 이 에러가 발생하고는 한다.

xxx.java:523: warning: unmappable character for encoding UTF-8

 

이는 보통 소스 파일은 UTF-8 포맷으로 되어 있지만, preprocess 과정에서 파일을 복사할 때 UTF-8포맷이 아닌 형태로 복사되면서 발생을 한다.

 

▶해결방법

●컴파일 명령 하기 전에 환경 셋팅을 한다.

C:\xx\> set JAVA_TOOL_OPTIONS=-Dfile.encoding=UTF8

C:\xx\>ant release

 

●매번 환경 셋팅이 귀찮으면, 환경 변수를 설정해 놓으면 된다.




반응형

'SW개발' 카테고리의 다른 글

[JSON 온라인 뷰어]  (0) 2014.09.29
[Android : 메소드 프로파일링]  (0) 2014.04.24
[Eclipse에서 class 파일 소스 보기]  (1) 2014.04.23
[Android Framwork소스를 이용한 디버깅]  (2) 2014.03.03
[Android 통합로그]  (0) 2014.03.01
[Android Contact DB 확인하기]  (0) 2013.10.31
[Android, Activity/Receiver/Service]  (0) 2013.10.29
[SMS TPDU field]  (0) 2013.05.07
[Java Script문법]  (0) 2013.03.23
[CB Specification]  (0) 2013.01.16
반응형

 

안드로이드의 Contacts의 DB를 확인 해보자.

Android콘텍트 DB를 열어보기 위해 삽질했던 내용을 포함한다.

 

<사용 툴>

1) SQLite Database Browser

2) SQLite Developer

3) Eclipse PlugIn : sqlitemanager

4) Sqlite expert personal

 

 

1.아래의 명령을 통해 스마트폰에서 전화번호부의 SQLite DB를 내컴퓨터에 가져온다.

adb pull /data/data/com.android.providers.contacts/databases ./contact_databases

 

2.일반적으로 많이 사용하는 "SQLite Database Browser" 설치하여 내용을 확인해보자.

-설치파일 : http://sourceforge.net/projects/sqlitebrowser/

 

3.이상하게 DB를 열었는데 아무런 반응이 없다. Contact DB는 특이한 무언가가 있나보다.

4.구글링을 통해 또 다른 프로그램인, "SQLite Developer"를 설치해서 확인해 보자.

-설치파일 : http://www.sqlitedeveloper.com/download

 

5.이 번에는 에러가 발생한다. 분명 DB이고 암호화 했을 것 같지 않은데도 말이다…

"ERROR:file is encrypted or is not a database!"

 

6. 또 다시 네이버와 구글링을 통해 Eclipse의 플러그인 "sqlitemanager"를 이용하여 DB를 확인 할 수 있다고 한다.

-설치파일 및 설명 : http://androidcode-sqlite.blogspot.kr/2013/04/sqlitemanager-plugin-for-eclipse-android.html

 

7.Error ("Failed to create the part's controls")와 함께 Contacts2.db 파일이 여전히 열리지 않는다.

 

8.삽질의 연속이다.

지인에게 물어 물어 찾은"Sqlite expert personal" 로 시도해보자.

-설치파일 : http://www.sqliteexpert.com/download.html

 

9. 이 번에도 실패란 말인가. 장문의 에러문과 함께 팝업이 발생을 한다.

 

10. 앗. 에러가 나긴 했지만 DB의 내용을 드디어 확인해 볼 수 있다.

 

한참의 시간과 노력을 들여 삽질한 끝에 안드로이드의 Contacts DB를 열어 볼 수 있었지만,

실제로 값을 확인하는 시간은 한순간이었다는…

 

혹시라도 더 좋은 방법이나 툴을 알고 있으면 댓글로 공유바랍니다. ㅠㅠ

반응형

'SW개발' 카테고리의 다른 글

[Android : 메소드 프로파일링]  (0) 2014.04.24
[Eclipse에서 class 파일 소스 보기]  (1) 2014.04.23
[Android Framwork소스를 이용한 디버깅]  (2) 2014.03.03
[Android 통합로그]  (0) 2014.03.01
[unmappable character for encoding UTF-8]  (0) 2014.01.04
[Android, Activity/Receiver/Service]  (0) 2013.10.29
[SMS TPDU field]  (0) 2013.05.07
[Java Script문법]  (0) 2013.03.23
[CB Specification]  (0) 2013.01.16
[LINUX][특정 사용자 연결 종료]  (1) 2012.11.30
반응형

액티비티, 리시버, 서비스에 대한 간단한 사용법과 각각의 시작 함수들에 대해 정리하였다.

■ Activity

  

Activity

AndroidManifest.xml

<activity android:name="com.custom.domain.xxxActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN"></action>

Class

extends xxxActivity

Start Function

protected void onCreate(Bundle savedInstance)
Intent intent = getIntent();

 

■ Receiver

  

Receiver

AndroidManifest.xml

<receiver android:name=".SystemStateBroadcastReceiver">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" />

Class

extends BroadcastReceiver

Start Function

public void onReceive(Context context, Intent intent)

 

■ Service

  

Service

AndroidManifest.xml

<service android:name="com.custom.domain.xxxService" >
<intent-filter>
<action android:name="com.vlingo.midas.SeamlessRecognition" />

Class

extends Service

Start Function

First time : onCreate() -> onStartCommand(Intent intent, int flags, int startid)
After first time : onStartCommand(Intent intent, int flags, int startid)

반응형

'SW개발' 카테고리의 다른 글

[Eclipse에서 class 파일 소스 보기]  (1) 2014.04.23
[Android Framwork소스를 이용한 디버깅]  (2) 2014.03.03
[Android 통합로그]  (0) 2014.03.01
[unmappable character for encoding UTF-8]  (0) 2014.01.04
[Android Contact DB 확인하기]  (0) 2013.10.31
[SMS TPDU field]  (0) 2013.05.07
[Java Script문법]  (0) 2013.03.23
[CB Specification]  (0) 2013.01.16
[LINUX][특정 사용자 연결 종료]  (1) 2012.11.30
[예약 실행 crontab]  (0) 2012.11.27
반응형

 

SMS TPDU Type별로 Field 정리

원문 : http://en.wikipedia.org/wiki/GSM_03.40


반응형

'SW개발' 카테고리의 다른 글

[Android Framwork소스를 이용한 디버깅]  (2) 2014.03.03
[Android 통합로그]  (0) 2014.03.01
[unmappable character for encoding UTF-8]  (0) 2014.01.04
[Android Contact DB 확인하기]  (0) 2013.10.31
[Android, Activity/Receiver/Service]  (0) 2013.10.29
[Java Script문법]  (0) 2013.03.23
[CB Specification]  (0) 2013.01.16
[LINUX][특정 사용자 연결 종료]  (1) 2012.11.30
[예약 실행 crontab]  (0) 2012.11.27
[SIM Field for SMS & CBS]  (0) 2012.11.21
반응형

 

■코드 넣기

HTML 코드안에 아래와 같이 추가를 하면 된다.

<script type="text/javascript">

자바스크립트 코드 넣는 곳...

< / s c r i p t >

 

■명령문

모든 명령문의 끝에는 세미콜론을 입력

명령문;

 

■주석(Comment)

// 이것은 주석입니다.

/* 이것도

주석입니다. */

 

■변수(variable)

자바 스크립트에서는 데이터 형식을 구분하지 않음.

var로 선언을 하면 지역변수로 사용가능.

var varString = "문자" ;

varString = "문자" ; //var로 선언 하지 않아도 됨

varVal = 10;

var varCry = "don\'t cry!"; //이스케이프문자로 역슬래쉬(\)를 사용

var varFloat = -20.373

var varBool = true;

 

■배열(array)

var myArray = Array(4);

var myArray = Array(); //갯 수를 정하지 않아도 됨

var myArray = Array("첫번째","두번째"); //값을 초기화 가능

var myArray = Array("첫번째",222,false); //다양한 데이타 형식으로 입력 가능

myArray[0] = "첫번째" //array 사용

myArray["일번"] = "첫번째" //배열의 인덱스로 문자열을 사용 가능

 

■ 산술 연산자

기본 언어에서 사용하는 연산자 모두 사용 가능 : +, -, *, /, ++, --

var varA = "학교" + "종이"; // 합할 때도 + 연산 사용

 

■ 조건문

if (조건) {

명령문;

}

 

if (1 > 2) {

a l e r t ( "조건 만족");

} else {

a l e r t ( "기타");

}

 

■ 비교 연산자

크기 비교를 위해 사용하는 크다(>),작다(<),크거나 같다(> =),작거나 같다(< =), 같다(==) 를 사용

If(3 <= MAX)

If("행복" == "슬픔") //문자열도 비교 가능

 

■ 논리 연산자

&& (and), ||(or) , !(not)

if ( num > 10 || num < 5 )

 

■ 반복문

while (반복 조건) {

명령문;

}

 

do {

명령문;

} while (반복조건);

 

for (초기 조건; 조건식; 조건 변경) {

명령문;

}

 

■ 함수(function)

function 함수이름(인수) {

명령문;

}

 

function myFunc() { //함수 정의

alert("Calling My Function");

}

myFunc(); //함수 호출

 

function myFunc (num1,num2) { //함수 정의

var total = num1 * num2;

a l e r t ( t o t a l ) ;

}

myFunc(1, 2); //함수 호출

 

반응형

'SW개발' 카테고리의 다른 글

[Android 통합로그]  (0) 2014.03.01
[unmappable character for encoding UTF-8]  (0) 2014.01.04
[Android Contact DB 확인하기]  (0) 2013.10.31
[Android, Activity/Receiver/Service]  (0) 2013.10.29
[SMS TPDU field]  (0) 2013.05.07
[CB Specification]  (0) 2013.01.16
[LINUX][특정 사용자 연결 종료]  (1) 2012.11.30
[예약 실행 crontab]  (0) 2012.11.27
[SIM Field for SMS & CBS]  (0) 2012.11.21
[Linux]심볼릭 링크&하드 링크  (2) 2012.11.20
반응형

Cell Broadcast Service에 대한 스팩을 정리한 내용이다.

 

CB Message Parameter

Octet Number(s)

Field

12

Serial Number

34

Message Identifier

5

Data Coding Scheme

6

Page Parameter

788

Content of Message

 

Serial Number

GS(Geographical Scope)

GS Code

Display Mode

Geographical Scope

00

Immediate

Cell wide

01

Normal

PLMN wide

10

Normal

Location Area wide in GSM,
Service Area wide in UMTS

11

Normal

Cell wide

 

  • only cell wide : which means that any CBS message if received in the next cell is regarded as "new"
  • PLMN wide : which means that the Message Code and/or Update Number must change in the next cell for the CBS message to be "new"
  • Location Area wide (in GSM) : which means that a CBS message with the same Message Code and Update Number may or may not be "new" in the next cell according to whether the next cell is in the same Location Area as the current cell
  • Service Area Wide (in UMTS) : which means that a CBS message with the same Message Code and Update Number may or may not be "new" in the next cell according to whether the next cell is in the same Service Area as the current cell

 

Message Code

The Message Code differentiates between CBS messages from the same source and type (i.e. with the same Message Identifier). Message Codes are for allocation by PLMN operators.

The Message Code identifies different message themes. For example, let the value for the Message Identifier be "Automotive Association" (= source), "Traffic Reports" (= type). Then "Crash on A1 J5" could be one value for the message code, "Cow on A32 J4" could be another, and "Slow vehicle on M3 J3" yet another.

반응형

'SW개발' 카테고리의 다른 글

[unmappable character for encoding UTF-8]  (0) 2014.01.04
[Android Contact DB 확인하기]  (0) 2013.10.31
[Android, Activity/Receiver/Service]  (0) 2013.10.29
[SMS TPDU field]  (0) 2013.05.07
[Java Script문법]  (0) 2013.03.23
[LINUX][특정 사용자 연결 종료]  (1) 2012.11.30
[예약 실행 crontab]  (0) 2012.11.27
[SIM Field for SMS & CBS]  (0) 2012.11.21
[Linux]심볼릭 링크&하드 링크  (2) 2012.11.20
[스마트 포인터]  (0) 2012.10.10
반응형

Unix계열인 Linux서버에서 특정 사용자 사용을 종료하려고 한다.

 

아래와 같은 명령을 사용하면 서버를 사용하고 있는 사용자를 볼 수 있다.

$who

User1 pts/1 Nov 9 13:43 (xxx.xxx.xxx.57)

User2 pts/2 Nov 9 13:45 (xxx.xxx.xxx.57)

User3 pts/3 Nov 9 13:45 (xxx.xxx.xxx.57)

 

만약 User3의 pts/3 을 강제 세션 종료하길 원할 경우, 아래와 같이 입력한다.

# skill -KILL -v pts/3 <- root 권한(#)으로 실행. su명령을 이용하여 root권한을 가진 후 실행해야 한다.

 

사용자의 연결이 끊겼는지 아래와 같이 확인 할 수 있다.

$who

User1 pts/1 Nov 9 13:43 (xxx.xxx.xxx.57)

User2 pts/2 Nov 9 13:45 (xxx.xxx.xxx.57)

 

반응형

'SW개발' 카테고리의 다른 글

[Android Contact DB 확인하기]  (0) 2013.10.31
[Android, Activity/Receiver/Service]  (0) 2013.10.29
[SMS TPDU field]  (0) 2013.05.07
[Java Script문법]  (0) 2013.03.23
[CB Specification]  (0) 2013.01.16
[예약 실행 crontab]  (0) 2012.11.27
[SIM Field for SMS & CBS]  (0) 2012.11.21
[Linux]심볼릭 링크&하드 링크  (2) 2012.11.20
[스마트 포인터]  (0) 2012.10.10
[3GPP2]  (0) 2012.09.03
반응형

윈도우에는 "예약실행"이 있고, Unix 계열인 Linux에는 crontab이 있다.

 

crontab 사용법은 간단한데, 세 개의 옵션만 사용 할 수 있으면 된다.

crontab -e, crontab -l, crontab -r

 

-e : 예약 리스트를 Edit

-l : 예약 리스트를 Display

ex) #crontab -u user9 -l <-관리자 권한으로 user9계정 사용자의 예약작업 확인

-r : 예약 리스트를 초기화 한다. (주의가 필요하다.)

 

예약리스트는 아래의 형식으로 입력을 한다.

[분] [시] [일] [월] [요일] /실행할 쉘명령어

요일은 0~7까지 가능하며 0=7은 일요일을 의미하며 1이 월요일이다.

 

Example 1) 매일 오후5시 20분에 자기의 홈 폴더에 있는 test.sh를 실행한다.

Example 2) 1, 4, 7, 10 각 월 1일 00시 30분에 test.sh를 실행한다.

30 0 1 1,4,7,10 * ~/test.sh 

Example 3) 토요일 00시 30분에 test.sh를 실행한다.

30 0 * * 6 ~/test.sh 


●Controlling crontab Access 

cron utility를 제어하는 두개의 file 

/etc/cron.d/cron.allow 

/etc/cron.d/cron.deny


●User Access 

- cron.allow file이 존재하면, 그 file에 적혀있는 user만이 

crontab 명령어를 사용할 수있다. 

- 이 file이 없으면 crontab은 cron.deny file을 체크해서 user가 crontab 실행을 금지할 지를 결정한다. 

- 만약 둘다 없으면 crontab은 root만 실행시킬 수 있다. 

cf) daemon, bin, smtp, nuucp, listen, nobody, noaccess file은 crontab 사용할 수 없다. 

- cron.allow file은 user가 만들어 주어야한다. 

- crontab 명령어는 crontab file을 수정, 삭제, 편집할 수있다. 

- crontab 명령어는 user에대한 입력을 /var/ spool/cron/crontabs/username에 저장한다. 

- root 만이 다른 user의 crontab file을 읽고 편집할 수있다. 

- root의 crontab file은 /var/spool/cron/crontab/root 이다.


추가로, 처음 "crontab –e"를 실행하게 되면 Editor를 설정한다.

이후에 Editor를 변경하고 싶을 때는 "select-editor"를 실행하면 된다.


반응형

'SW개발' 카테고리의 다른 글

[Android, Activity/Receiver/Service]  (0) 2013.10.29
[SMS TPDU field]  (0) 2013.05.07
[Java Script문법]  (0) 2013.03.23
[CB Specification]  (0) 2013.01.16
[LINUX][특정 사용자 연결 종료]  (1) 2012.11.30
[SIM Field for SMS & CBS]  (0) 2012.11.21
[Linux]심볼릭 링크&하드 링크  (2) 2012.11.20
[스마트 포인터]  (0) 2012.10.10
[3GPP2]  (0) 2012.09.03
[QXDM] [로그 저장하고 불러오기]  (2) 2012.08.24
반응형

다음은 SMS(Short Message Service)와 CBS(Cell Broadcast Service)에서 사용하는 SIM Filed이다.

[3GPP TS 11.11참고]

EF-SMS

 

EF-SMSR(SMS Status Report)

 

EF-SMSP(SMS Parameters)

 

EF-SMSS(SMS Status)

 

 

EF-CBMI (CB Message Identifier Selection)

 

EF-CBMIR (CB Message Identifier Range Selection)

 

EF-ELP (Extended Language Preference)

 

EF-CBMID (CB Message Identifier for Data Download)

반응형

'SW개발' 카테고리의 다른 글

[SMS TPDU field]  (0) 2013.05.07
[Java Script문법]  (0) 2013.03.23
[CB Specification]  (0) 2013.01.16
[LINUX][특정 사용자 연결 종료]  (1) 2012.11.30
[예약 실행 crontab]  (0) 2012.11.27
[Linux]심볼릭 링크&하드 링크  (2) 2012.11.20
[스마트 포인터]  (0) 2012.10.10
[3GPP2]  (0) 2012.09.03
[QXDM] [로그 저장하고 불러오기]  (2) 2012.08.24
[리눅스 쉘(Shell) 스크립트]  (5) 2012.08.17
반응형

 

심볼릭 링크(Symbolic Link)

사용법 ) ln -s 원본파일 링크파일명

Windows 바로가기 아이콘과 비슷

주로 사용자가 많이 사용

긴 디렉토리명 이동시 유용

원본을 다른 곳으로 이동시키면 사용 못함

새로운 inode 생성

원본 자체 포인터 역할 뿐이므로, 원본 수정 시 수정된 파일이 보임

원본의 삭제 시 링크가 끊김

 

Symbolic link  제거

사용법) rm symlink_name

symlink를 제거하기 전에 프롬프트를 표시하려면 -i 옵션을 사용.

rm -i symlink_name

          rm: remove symbolic link 'symlink_name'?

다른 방법) unlink symlink_name

 

하드 링크(Hard Link)

사용법 ) ln 원본파일 링크파일명

동일한 inode 사용

원본 수정 시 하드링크도 수정됨

원본 삭제 시 살아 있음

원본의 이동이나 삭제 시 남아 있음

파일 복사와 차이는 공간을 차지하지 않음

 

반응형

'SW개발' 카테고리의 다른 글

[Java Script문법]  (0) 2013.03.23
[CB Specification]  (0) 2013.01.16
[LINUX][특정 사용자 연결 종료]  (1) 2012.11.30
[예약 실행 crontab]  (0) 2012.11.27
[SIM Field for SMS & CBS]  (0) 2012.11.21
[스마트 포인터]  (0) 2012.10.10
[3GPP2]  (0) 2012.09.03
[QXDM] [로그 저장하고 불러오기]  (2) 2012.08.24
[리눅스 쉘(Shell) 스크립트]  (5) 2012.08.17
[Linux와 Shell]  (0) 2012.08.14
반응형

Android Framework에 있는 C++ 소스를 보다보면 "sp<>" 같은 부분이 나와서 안드로이드 소스 분석을 어렵게 하였다.

 C++의 기본 문법에서는 볼 수 없었던 부분이라 많이 헷갈렸는데 구글링을 해보니 Smart Pointer라 불리며, 아래와 같이 잘 정리한 글이 있다.

===========================================================

우리는 자원 관리 클래스(resource management class)와 스마트 포인터(smart pointer)를 직접 작성하고 구현하는 방법을 공부해 보도록 하겠습니다.

 

 자원(resource)이란 사용 후 시스템에 돌려줘야 하는 모든 것을 말합니다.(EC++)

 

자원은 사용 후 꼭 다시 시스템에 되돌려줘야 하기 때문에 프로그램의 많은 버그가 이 자원 관리 쪽에서 만들어지곤 합니다.

이런 버그를 최소화하기 위해 자원 관리를 자동으로 할 수 있는 자원 관리 클래스를 만들어 사용합니다. 즉 자원 관리를 추상화한 자원 관리 클래스를 만들어 사용하는 것이지요.

 

 프로그램에서 가장 많이 사용하는 대표적인 자원이 heap(동적) 메모리입니다. heap 메모리는 생성 후 꼭 삭제해야 하는 자원입니다.

 JAVA나 C#의 장점 중 하나는 객체를 메모리 할당하고 삭제를 신경 쓰지 않아도 된다는 것입니다. 자동으로 객체가 삭제되기 때문입니다.

C++도 객체를 메모리 할당 후 잊어버려도 되는 방법이 있습니다. 바로 스마트 포인터를 사용하는 것입니다.

 

1, 스마트 포인터의 사용

 스마트 포인터를 사용해야 하는 이유를 예제로 설명하겠습니다.

 

아래는 자원(동적 메모리)이 누출되는 간단한 예입니다.

void DoSomething( )
{
    int *pn = new int(10);

    //.......
    //이곳에서 delete 호출을 하지 않거나
    //return, break 예외 등이 발생하면 메모리가 삭제되지 않습니다.

// 두 번 삭제하는 경우에..

 

    delete pn;
}

그래서 자원(메모리)을 자동으로 해제(삭제)할 수 있는 자원 관리 클래스(스마트 포인터 클래스)를 사용하여 동적 객체를 관리합니다.

 

대표적인 스마트 포인터 클래스가 auto_ptr과 shared_ptr입니다.

auto_ptr은 C++ 표준 라이브러리에 포함되어 있으며 shared_ptr은 std::tr1과 boost 라이브러리에 포함되어 있습니다. vs2008은 vc++ 2008 feature pack을 설치하셔야 합니다.

 

스마트 포인터는 포인터와 비슷하게 동작하며 포인터 기능에 자동 메모리 삭제 기능이 플러스된 포인터라고 생각하시면 됩니다.

스마트 포인터는 스마트 포인터 클래스의 객체이며 객체가 소멸될 때 소멸자를 이용하여 동적 메모리를 삭제합니다.

(다음에 직접 구현해 보도록 하겠습니다.)

 

아래는 auto_ptr과 shared_ptr을 사용한 예제입니다.

#include <iostream>
#include <memory>
#include <boost/shared_ptr.hpp>
using namespace std;
using namespace boost; 
void DoSomething( )
{
    auto_ptr<int> ptr1= auto_ptr<int>( new int(10) );
    shared_ptr<int> ptr2= shared_ptr<int>( new int(50) );
    int *ptr3 = new int(100);

    cout << *ptr1 << endl;
    cout << *ptr2 << endl;
    cout << *ptr3 << endl;

    delete ptr3;
    // ptr1과 ptr2는 각각 가리키는 int형 동적 메모리가 각 소멸자에 의해 자동 삭제됨!
}
void main( )
{
    DoSomething();
}

  1. 10
    50
    100

ptr1과 ptr2 객체는 auto_ptr 클래스와 shared_ptr 클래스의 객체로 스마트 포인터라 합니다.

또 실제 포인터와 같은 인터페이스와 기능을 제공합니다.

 

2, auto_ptr과 shared_ptr의 비교

auto_ptr 객체와 shared_ptr 객체의 가장 큰 차이점은

auto_ptr 객체는 단 하나의 객체만이 동적 메모리 객체(실제 객체)를 가리킬 수 있습니다. (소유권 이전이라 합니다.)

shared_ptr 객체는 레퍼런스 카운트를 이용하여 여러 객체가 동적 메모리 객체(실제 객체)를 가리킬 수 있습니다.

 

아래는 auto_ptr와 shared_ptr의 차이점을 보입니다.

#include <iostream>
#include <memory>
#include <boost/shared_ptr.hpp>
using namespace std;
using namespace boost; 
void DoSomething( )
{
    auto_ptr<int> ptr_a1= auto_ptr<int>( new int(10) );
    auto_ptr<int> ptr_a2= ptr_a1;
    auto_ptr<int> ptr_a3= ptr_a2;
    shared_ptr<int> ptr_s1= shared_ptr<int>( new int(50) );
    shared_ptr<int> ptr_s2= ptr_s1;
    shared_ptr<int> ptr_s3= ptr_s2;
    int *ptr_1 = new int(100);
    int *ptr_2 = ptr_1;
    int *ptr_3 = ptr_2;


    //cout << *ptr_a1<<','<<*ptr_a2<<','<<*ptr_a3 << endl; // 오류(한 객체만이 동적 메모리 소유)
    cout << *ptr_s1<<','<<*ptr_s2<<','<<*ptr_s3 << endl;
    cout << *ptr_1<<','<<*ptr_2<<','<<*ptr_3 << endl;

    delete ptr_1;
    // ptr1과 ptr2는 가리키는 int형 동적 메모리가 각 소멸자에 의해 자동 삭제됨!
}
void main( )
{
    DoSomething();
}
  1. 10,... 오류...
  2. 50,50,50
    100,100,100

그래서 실제 포인터와 유사한 스마트 포인터는 shared_ptr입니다. STL 컨테이너 등에 auto_ptr을 사용하면 대박이 나겠죠??? ㅡㅡ?

아래 그림을 참고하세요.

 auto_ptr,shared_ptr(1).png

 

 

다음 예제는 객체형(Point 객체)을 사용하는 예제입니다.

#include <iostream>
#include <memory>
#include <boost/shared_ptr.hpp>
using namespace std;
using namespace boost; class Point
{
private :
    int x, y;
public :
    explicit Point(int _x=0, int _y=0) : x(_x), y(_y) { cout <<"Point()"<<endl; }
    ~Point( ) { cout <<"~Point()" <<endl; }
    void Print( )const
    {
        cout << x <<", " << y << endl;
    }
};
void DoSomething( )
{
    auto_ptr<Point> ptr_a1= auto_ptr<Point>( new Point(2, 3) );
    auto_ptr<Point> ptr_a2= ptr_a1;
    auto_ptr<Point> ptr_a3= ptr_a2;
    shared_ptr<Point> ptr_s1= shared_ptr<Point>( new Point(5, 5) );
    shared_ptr<Point> ptr_s2= ptr_s1;
    shared_ptr<Point> ptr_s3= ptr_s2;
    Point *ptr_1 = new Point(10, 20);
    Point *ptr_2 = ptr_1;
    Point *ptr_3 = ptr_2;


    (*ptr_a3).Print();
    (*ptr_s3).Print();
    (*ptr_3).Print();
    ptr_a3->Print();
    ptr_s3->Print();
    ptr_3->Print();

    delete ptr_1;
    // ptr1과 ptr2는 가리키는 int형 동적 메모리가 각 소멸자에 의해 자동 삭제됨!
}
void main( )
{
    DoSomething();
}
  1. Point()
    Point()
    Point()
    2, 3
    5, 5
    10, 20
    2, 3
    5, 5
    10, 20
    ~Point()
    ~Point()
    ~Point()

 ptr_a3, ptr_s3, ptr_3 모두 객체의 주소를 가리키는 포인터이므로 Print() 멤버함수 호출 인터페이스가 같습니다.

또 Point 객체가 생성될 때 한 번의 생성자와 소멸될 때 한 번의 소멸자가 호출됩니다.

 

아래 그림을 참고하세요.

auto_ptr,shared_ptr2.png 

 

 

다음은 동적 객체를 직접 삭제하는 예제입니다.

 #include <iostream>
#include <memory>
#include <boost/shared_ptr.hpp>
using namespace std;
using namespace boost; 
class Point
{
private :
    int x, y;
public :
    explicit Point(int _x=0, int _y=0) : x(_x), y(_y) { cout <<"Point()"<<endl; }
    ~Point( ) { cout <<"~Point()" <<endl; }
    void Print( ) const
    {
        cout << x <<", " << y << endl;
    }
};
void DoSomething( )
{
    auto_ptr<Point> ptr1= auto_ptr<Point>( new Point(2, 3) );
    shared_ptr<Point> ptr2= shared_ptr<Point>( new Point(5, 5) );
    Point *ptr3 = new Point(10, 20);

    ptr1.reset(); //직접 동적 객체(Point) 삭제
    ptr2.reset(); //직접 동적 객체(Point) 삭제
    delete ptr3;

    cout << "== something  ==" <<endl;
}
void main( )
{
    DoSomething();
}
  1. Point()
    Point()
    Point()
    ~Point()
    ~Point()
    ~Point()
    == something  ==

 원하는 시점에 직접 객체를 삭제할 수 있습니다.

 

-출처 : http://coolprogramming.springnote.com/pages/3994205 


반응형

'SW개발' 카테고리의 다른 글

[CB Specification]  (0) 2013.01.16
[LINUX][특정 사용자 연결 종료]  (1) 2012.11.30
[예약 실행 crontab]  (0) 2012.11.27
[SIM Field for SMS & CBS]  (0) 2012.11.21
[Linux]심볼릭 링크&하드 링크  (2) 2012.11.20
[3GPP2]  (0) 2012.09.03
[QXDM] [로그 저장하고 불러오기]  (2) 2012.08.24
[리눅스 쉘(Shell) 스크립트]  (5) 2012.08.17
[Linux와 Shell]  (0) 2012.08.14
[VI 글자 색상 바꾸기]  (2) 2012.08.13
반응형

3GPP2는 ITU(International Telecommunicatin Union)의 IMT-2000(International mobile Telecommunications)을 을 위해 탄생하였다.

3세대 ANSI-41 네트워크 및 이를 토대로 무선전송 및 단말기에 대한 규격서를 작성한다는 계획을 갖고,

유럽과 일본이 주도하는 GSM(Global System for Mobile)에 포커스를 둔 ETSI(European Telecommunications Standards Institute)의 3GPP에 대응하기 위하여,

CDMA에 포커싱 해서 미국의 주도하에 구성한 단체이다.

 

공식적으로 프로젝트의 OPs(Organizational Partners)는 다섯 개의 SDO(Standards Development Organization)가 포함되어 있다.

► ARIB - Association of Radio Industries and Businesses (Japan)

► CCSA - China Communications Standards Association (China)

► TIA - Telecommunications Industry Association (North America)

► TTA - Telecommunications Technology Association (Korea)

► TTC - Telecommunications Technology Committee (Japan)

 

추가적으로 네 개의 MRP(Market Representation Partners)를 구성하고 있다.

► The CDMA Development Group (CDG)

► IPv6 Forum

► Small Cell Forum

► CDMA Certification Forum

 

각 맴버회사의 대표들로 구성된 네 개의 TSGs(Technical Specification Groups) 는 정기적으로 1년에 10번 만나서 3GPP2의 스펙을 만든다.

► TSG-A (Access Network Interfaces)

► TSG-C (cdma2000®)

► TSG-S (Services and Systems Aspects)

► TSG-X (Core Networks)

 

● 참가 Member 회원사

Agilent Technologies    TIA

Airvana    TIA

Alcatel-Lucent Shanghai Bell    CCSA

Alcatel Lucent    TIA

Applied Communication Sciences    TIA

Bridgewater Systems Corporation    TIA

China Telecom    CCSA

Cisco Systems, Inc.    TIA

COMPRION GmbH    TIA

DBSD North America    TIA

Ericsson, Inc.    TIA

ETRI    TTA

Gemalto, Inc.    TIA

Hitachi, Ltd.    TTC

Huawei Technologies Co., Ltd.    CCSA

KDDI Corporation    ARIB

Kyocera Corporation    ARIB

LG Electronics, Inc.    TTA

LG Uplus    TTA

Motorola Mobility, Inc.    TIA

National Communications System    TIA

NEC Corporation    TTC

Nokia Siemens Networks    TIA

Qualcomm Incorporated    TIA

Reliance-IITM Telecom Centre of Excellence    TIA

Research In Motion    TIA

Research Institute of Telecommunication Transmission, MII    CCSA

Rohde&Schwarz, America    TIA

Samsung Electronics Co., Ltd.    TTA

SGS Wireless US, Inc.    TIA

Sony Ericsson Mobile Communications Japan, Inc.    ARIB

Spirent Communications    TIA

Sprint Nextel    TIA

TeleCommunication Systems, Inc.    TIA

US Cellular    TIA

Verizon Wireless    TIA

VIA Telecom    TIA

ZTE Corporation    CCSA

   

● 3GPP2 홈페이지 : http://www.3gpp2.org


반응형

'SW개발' 카테고리의 다른 글

[LINUX][특정 사용자 연결 종료]  (1) 2012.11.30
[예약 실행 crontab]  (0) 2012.11.27
[SIM Field for SMS & CBS]  (0) 2012.11.21
[Linux]심볼릭 링크&하드 링크  (2) 2012.11.20
[스마트 포인터]  (0) 2012.10.10
[QXDM] [로그 저장하고 불러오기]  (2) 2012.08.24
[리눅스 쉘(Shell) 스크립트]  (5) 2012.08.17
[Linux와 Shell]  (0) 2012.08.14
[VI 글자 색상 바꾸기]  (2) 2012.08.13
[Android]서비스의 라이프 사이클  (0) 2012.08.10
반응형

QXDM : 퀄컴(Qualcomm) Modem칩을 사용하는 스마트폰이나 휴대폰의 디버깅을 위한 각종 정보 및 로그를 볼 수 있는 툴

 

기본적인 기능인 로그를 저장하고 불러오는 방법이다.

 

Log를 저장하려면 "Save Items"를 클릭

 

저장된 로그를 불러오려면 "Replay items"를 클릭해서 저장한 로그를 선택.

 

Replay를 할 때 로그가 나오는 타이밍을 조정할 수 있다.

"No Wait"을 선택하면 로그가 한꺼번에 Display된다.

 

불러온 Log가 Display된다.

반응형

'SW개발' 카테고리의 다른 글

[예약 실행 crontab]  (0) 2012.11.27
[SIM Field for SMS & CBS]  (0) 2012.11.21
[Linux]심볼릭 링크&하드 링크  (2) 2012.11.20
[스마트 포인터]  (0) 2012.10.10
[3GPP2]  (0) 2012.09.03
[리눅스 쉘(Shell) 스크립트]  (5) 2012.08.17
[Linux와 Shell]  (0) 2012.08.14
[VI 글자 색상 바꾸기]  (2) 2012.08.13
[Android]서비스의 라이프 사이클  (0) 2012.08.10
[Android][OOM(Out Of Memory) Adjustment]  (0) 2012.08.02
반응형

 

1. 쉘(Shell)스크립트란 ?

  • 쉘을 통하여 프로그램을 만든 것
  • DOS의 Batch 파일 작성과 비슷하지만 더 막강한 기능들을 가지고 있음
  • 기존의 명령어들을 이용하여 만들어지는 스크립트 파일의 문법은 다른 프로그래밍 언어보다 매우 간단하며 쉽게 응용이 가능

 

 

2. 쉘 스크립트의 시작

  • 쉘 프로그램을 만들기 위해서 vi에디터나 gedit 등을 이용
  • 스크립트 파일의 가장 위의 첫 라인은 "#! /bin/bash" 로 시작
  • bash로 작성되었다는 것을 의미하며, bash을 기준으로 실행된다는 것을 의미
  • Bourne Shell인 경우 "#! /bin/sh"

 

 

3. 쉘 스크립트의 실행

아래와 같이 echo 를 이용하여 화면에 "bash script test!!" 를 출력 할 수 있도록 스크립트 작성

 

아래와 같이 작성한 스크립트 파일에 실행 권한이 있는지 확인하고, 없으면 실행 권한을 추가하고 실행을 하면 작성한 메시지가 Display되는 것을 볼 수 있다.

 

 

4. 변수 사용

  • Shell에 있어 변수의 사용은 매우 간단히 정의
  • 변수명=값
  • 주의 할 것은 '=' 사이의 좌우 공백이 없어야 함
  • 대소문자 구별
  • 숫자형 변수와 문자형 변수의 구별이 없음
  • a=10
  • b="헬로우 리눅스"
  • 변수의 내용을 사용할 때는 변수명 앞에 '$'를 붙인다.

 

 

5. 숫자 계산을 위한 연산자

  • expr : 숫자 계산
  • + : 더하기
  • - : 빼기
  • * : 곱하기('\*'로 사용)
  • /: 나누기
  • %: 나누기를 한 수 나머지 값
  • 주의
    • expr로 지정하는 경우 역작은따옴표( ` )를 사용 : 작은 따옴표( ' )가 아님 !
    • 연산자 *와 괄호 앞에는 역슬래스(\)를 같이 사용
    • 연산자와 숫자, 변수, 기호 사이에는 space가 존재

Ex1)

결과)

 

Ex2)

retult=`expr \( 1 + 2 - 1 \) \* 2`

 

 

6. 사용자의 입력 받기

read를 사용하여 사용자의 입력을 변수에 받을 수 있다.

Ex)

Echo에 –n을 붙이면 줄넘김을 하지 않음

결과)

 

 

7. 조건문 (if, elif, else)

if로 시작해서 fi로 끝난다.

 

 

8. 숫자 비교

[$A -gt $B] :        A가 B보가 크다     

[$A -lt $B] :        A가 B보다 작다.

[$A -ge $B] :        A가 B보다 크거나 같다.     

[$A -le $B] :        A가 B보다 작거나 같다.

[$A -eq $B] :        A와 B가 같다.     

[$A -ne $B] :        A와 B가 다르다.

Ex)

 

 

9. 문자 비교

["string1" = "string2"] :    두 문자열이 같은 경우(== 도 가능)

["string1" ! "string2"] :    두 문자열이 다른 경우

[-z "string"] :            문자열의 길이가 0인 경우

[-n "string"] :            문자열의 길이가 0이 아닌경우

 

 

10. 기타 조건

[-e "path"] :        path의 파일이나 디렉토리가 있는 경우

 

 

11. 관계 연산자

-a : and

-o : or

Ex)

 

 

12. for 문

  • 쉘 프로그램에서의 for 문은 일반적인 다른 프로그래밍 언어에서 사용되는 for 문의 형태와 다름
  • in 다음에 나오는 변수값을 순차적으로 변수에 대입하면서 반복 실행
  • 변수의 개수만큼 루프를 돌면서 do 다음의 문장을 실행하고 done으로 마무리

for 변수 in 변수값1 변수값2 변수값3 변수값4 …

do

    문장

done

Ex1) 숫자를 하나씩 출력

Ex2) ls 의 결과를 하나씩 출력

 

 

13. while 문

  • 조건문이 항상 참이라면, do와 done 사이의 문장이 무한 루프
  • ':' 기호와 1은 항상 참을 나타냄,
  • break, continue 사용 가능

 

while [ 조건문 ]

do

    문장…

done

Ex)

 

 

14. until 문

  • while 문과 같지만 반대로 동작
  • 거짓이면 루프를 돌고 참이면 루프를 종료
  • break, continue 사용 가능

until [ 조건문 ]

do

    문장…

done

 

 

15. case 문

변수 값을 받아들여서, 이 값에 맞는 문장을 실행

case 변수 in

패턴1)

    문장

    끝문장;;

패턴2)

    문장;;

     끝문장;;

*)

    문장

     끝문장;;

esac

Ex)

결과)

 

 

16. 함수

  • 함수는 불러주기 전에 선언되어야 함
  • C에서처럼 함수를 미리 선언하는 방법은 없음


16. 종료

  • exit : shell을 종료


17. Bash 주요 환경변수

Environment variable

의          미

 ENV  .bashrc 파일에서 설정하며 함수와 별명 등을 설정하는 환경 파일의 이름을 설정
 EUID  Shell이 시작할 때 현재 사용자의 유효 ID를 확장한다.
 HISTFILE  명령어 히스토리를 저장할 파일이름. 기본값은 ~/.bash_history이다.
 HOME  사용자의 홈 디렉토리의 값을 가지고 있으며 특정 디렉토리를 지정하지 않고 cd 명령을 사용할 때 이용한다.
 LANG  LC_로 시작하는 변수들에 포함되지 않는 로케일을 설정
 PATH  명령어의 검색 경로, 콜론으로 구분한 디렉토리 목록
 PPID  부모프로세스의 PID
 PWD  현재 작업 디렉토리
 SHELL  현재 사용되어지고 있는 SHELL
 UID  현재 사용자의 UID
 OLDPWD  이전 작업 디렉토리 (이전 한개만 저장)



반응형

'SW개발' 카테고리의 다른 글

[SIM Field for SMS & CBS]  (0) 2012.11.21
[Linux]심볼릭 링크&하드 링크  (2) 2012.11.20
[스마트 포인터]  (0) 2012.10.10
[3GPP2]  (0) 2012.09.03
[QXDM] [로그 저장하고 불러오기]  (2) 2012.08.24
[Linux와 Shell]  (0) 2012.08.14
[VI 글자 색상 바꾸기]  (2) 2012.08.13
[Android]서비스의 라이프 사이클  (0) 2012.08.10
[Android][OOM(Out Of Memory) Adjustment]  (0) 2012.08.02
[Linux][VIM설정]  (0) 2012.07.31
반응형

 

리눅스 운영체제는 크게 커널, 쉘, 사용자 프로그램으로 분류할 수 있다.

 

- 커널(Kernel)

- 쉘(Shell)

- 사용자 프로그램

 

 

1. 커널(Kernel)

  • 운영체제의 핵심
  • 도스에서 IO.SYS와 MSDOS.SYS
  • 모든 부분에서 여러 가지 기본적인 서비스를 제공
  • 시스템의 하드웨어와 다양한 프로세스나 메모리 등을 관리
  • 시스템을 제어

 

2. 쉘(Shell)

  • Operating System Command Interpreter
  • 커널과 사용자 프로그램의 중간에 위치하는 명령어 해석기
  • 쉴은 커널과 직접적으로 연결
  • 사용자가 로그인을 하면 자동으로 형성되어 명령어를 해석할 수 있는 상태로 만듬
  • 사용자 프로그램에서 실행시킨 명령어를 해석하여 그 결과를 커널로 보내주는 역할을 함
  • 쉘의 종류는 다양하나, 리눅스에서는 주로 bash(Bourne-Again Shell)을 사용

 

3. 사용자프로그램

  • 일반적으로 리눅스에서 사용하는 프로그램
  • 네트워크 서비스
    • 아파치 웹서버
    • FTP
    • SSH
    • 메일서버
  • 데몬이나 각종 소프트웨어 등

 

 

● 쉘(Shell)의 종류

1. Bourne Shell(sh)

  • 1979년, Bell 연구소의 Steven Bourne이 개발한 최초의 대중화된 유닉스 쉘
  • 가장 오랫동안 UNIX 시스템의 표준 구성요소
  • 후에 개발된 쉘에 비하여 기능적인 명에서 부족
  • 현재 리눅스에서 가장 많이 사용하고 있는 Bourn Shell의 변종인 Bash가 있음

 

2. Korn Shell(ksh)

  • Bourne Shell을 포함하는 더욱 강력한 쉘
  • 강력한 명령어 편집기로 인해서 일반적으로 유닉스에서 많이 쓰임
  • AT&T 사의 David Korn이 제작
  • Bourne Shell의 기능들을 확장한 쉘
  • Bourne Shell과의 호환성이 높음
  • C Shell의 기능들도 제공

 

3. C Shell(csh)

  • 버클리 대학교에서 개발됨
  • Bourne Shell과 호환이 되지만 인터페이스 구조가 다름
  • C언어 문법과 제어구조에 비슷한 면을 가짐
  • C Shell은 명령어 모드에서 다양한 기능을 제공
  • 유닉스 실행 시의 기본 Shell로 주로 스이기도 함

 

4. TC Shell(tcsh)

  • 1908년대 초반, Ken Greer 등이 C Shell을 확장시켜 제작
  • 프리 소프트웨어로 많은 사람들이 사용
  • C Shell의 모든 기능을 제공
  • 명령어 편집을 emacs 스타일 방식을 취함

 

5. Bourne Again Shell(bash)

  • 현재 리눅스 시스템의 기본 Shell
  • 가장 많이 이용
  • Bourne Shell의 기능을 추가, 발전
  • C Shell과 Korn Shell에서 제공하는 기능들도 상당수 포함
  • 다른 쉘에 비해 쉽게 접근이 가능

 

 

 

 

반응형

'SW개발' 카테고리의 다른 글

[Linux]심볼릭 링크&하드 링크  (2) 2012.11.20
[스마트 포인터]  (0) 2012.10.10
[3GPP2]  (0) 2012.09.03
[QXDM] [로그 저장하고 불러오기]  (2) 2012.08.24
[리눅스 쉘(Shell) 스크립트]  (5) 2012.08.17
[VI 글자 색상 바꾸기]  (2) 2012.08.13
[Android]서비스의 라이프 사이클  (0) 2012.08.10
[Android][OOM(Out Of Memory) Adjustment]  (0) 2012.08.02
[Linux][VIM설정]  (0) 2012.07.31
[Linux][Screen]  (1) 2012.07.31
반응형

 

VI Editor를 처음 사용하게 되면 터미널의 배경 색깔과 같은 어두운 색으로 주석이 표시되어 잘 보이지 않는다.

아래의 사진에서 보면 첫 번째 라인이 주석인데, 파란색으로 되어 있어 알아 보기가 어렵다.

 

VI 에디터에서 글자 색깔을 바꾸기 위해 현재 설정 값을 읽는다.

명령 모드에서 아래와 같이 "highlight" 를 입력한다. (참고로 명령 모드는 "ESC"키를 누른 다음 "콜론 :" 을 입력 )

 

명령을 입력하면 아래와 같이 설정된 값들을 볼 수 있다.

그 중 내가 바꿀 주석에 대한 설정값을 보면, "Comment xxx term=bold ctermfg=4" 로 설정이 되어 있다.

여기서 숫자 4가 파란색을 의미한다.

 

아래의 명령을 통해 주석의 색깔을 녹색으로 바꾼다. 녹색은 숫자로 2이다.

"highlight Comment xxx term=bold ctermfg=2"

주석을 녹색으로 바꾸니 한결 보기 좋다. ^__^

 

색상을 다른 색으로 바꾸고 싶다면 아래의 색상표의 숫자를 참고하면 된다.

 

사용자가 로그인 하였을 때 VI에 같은 값을 설정하고 싶으면, 사용자 Directory에 있는 " .vimrc " 파일에

VI에서 설정했던 값을 추가하여 저장을 해주도록 한다. (.vimrc파일이 없으면 추가하면 됨)

반응형

'SW개발' 카테고리의 다른 글

[스마트 포인터]  (0) 2012.10.10
[3GPP2]  (0) 2012.09.03
[QXDM] [로그 저장하고 불러오기]  (2) 2012.08.24
[리눅스 쉘(Shell) 스크립트]  (5) 2012.08.17
[Linux와 Shell]  (0) 2012.08.14
[Android]서비스의 라이프 사이클  (0) 2012.08.10
[Android][OOM(Out Of Memory) Adjustment]  (0) 2012.08.02
[Linux][VIM설정]  (0) 2012.07.31
[Linux][Screen]  (1) 2012.07.31
[Linux][alias 사용]  (1) 2012.07.31
반응형

 

Service의 Life Cycle

-startService()로 Service를 시작하면, onStartCommand()함수를 호출.

반응형

'SW개발' 카테고리의 다른 글

[3GPP2]  (0) 2012.09.03
[QXDM] [로그 저장하고 불러오기]  (2) 2012.08.24
[리눅스 쉘(Shell) 스크립트]  (5) 2012.08.17
[Linux와 Shell]  (0) 2012.08.14
[VI 글자 색상 바꾸기]  (2) 2012.08.13
[Android][OOM(Out Of Memory) Adjustment]  (0) 2012.08.02
[Linux][VIM설정]  (0) 2012.07.31
[Linux][Screen]  (1) 2012.07.31
[Linux][alias 사용]  (1) 2012.07.31
[UML Diagram과 StarUML]  (0) 2012.07.31

+ Recent posts