레퍼런스들을 찾아봤더니 디렉토리 리딩할때 sprintf 부분을 빼먹고 해서
모두 파일이름이나 디렉토리 이름으로 나오는 경우가 있었다. -_-;
한참을 해맸더니, 절대 경로를 완성해줘야 한다.

사소하지만 중요한 부분 같아 남겨본다.




char temp[512];


while( ( d = readdir( dp ) ) != NULL ) {

        sprintf(temp, "%s/%s", para_p_dir, d->d_name);
        wm.CatData( d->d_name );

        lstat( wm.GetData(), &st );

        if ( S_ISDIR( st.st_mode ) ) {
            fprintf( stdout, "[디렉토리] %s\n", wm.GetData() );
            rc = caching_dir( msg, wm.GetData() );
        } else if( S_ISREG( st.st_mode ) ) {
            fprintf( stdout, "[파일이름] %s\n", wm.GetData() );
        }
    }
0. 개요
이클립스에서 자바 파일을 디컴파일해 보니 쓰기 너무 편하더군요. 방법도 간단하고,
JAD 디컴파일러로 디컴파일한후, 플러그인에서 보여주는 방식입니다.
JAD.exe class_name.class 를 하면 class_name.jad 파일이 생성됩니다. 이렇게 써도 됩니다. 
( ex)>jad.exe class_name.class )

1. 설치
(1) JAD 파일을 받습니다.
 


(2) 이클립스 플러그인을 받습니다.
 


(3) 이클립스에서 jad 파일 경로를 지정합니다. ( 저는 개인 유틸리티 폴더 에 넣어놨습니다. )


2. 실행
임포트한 라이브러리에서 class 파일을 더블클릭 하면 됩니다.



-------------- 다른 블로그에서 퍼 온 글입니다. --------------

^M 문자와 관련해서 게시판을 검색해 보니 다양한 방법이 소개되어 있어서 이것을 참조하여 한 문서로 정리했습니다.

Vi(m) 사용시 ^M 없애기

vi(m)을 사용하다보면 윈도우즈에서 작업한 텍스트 파일에 ^M 문자가 붙는 경우를 종종 봅니다.
특히 editplus, ultraedit 등 문서편집기에서 바로 ftp 에 업로드 하는 경우도 빈번하더군요.

현재 vim에서는 도스 문서로 읽게 되면 이 문자가 붙지 않기도 하지만, 종종 이 문자 때문에 보기가 상당히 귀찮아 보일 때가 있습니다.
특히, SQL 백업 파일을 볼 때 이 문자가 붙기도 하는데 특정한 내용을 볼 때 이런 문자가 붙은 것을 보기는 상당히 힘들죠.
(sun의 파일을 aix에서 받을 때에도 이런 문제가 발생한다고 합니다)

이 문자는 ^M은 ^+M이 아니라 Control+v+m 입니다.
따라서, 다음에 이 문자를 없앨 때도 이렇게 타이핑을 하도록 합니다.

다음은
http://www.lug.or.kr/에 올라온 몇 개의 팁을 정리한 것입니다.
생각보다 많은 방법들이 있을 수 있겠군요.

1. vi(m)이 열린 상태
1.1 문자 치환 명령 이용

다음과 같이 문자 치환 명령으로 이 문자를 없애도록 합니다.
:1,$s/^M//g

물론 이것의 입력은 다음과 같이 하도록 합니다.
:1,$s/[Control]+v+m을 누른다.//g

1.2 파일포맷 변경

vim 5.0 이상에서는 다음과 같이 명령을 내리도록 합니다
:set fileformat=unix

혹은
:set ff=unix

그리고, 저장하고 종료합니다.
:wq

이와 반대로 끝에 ^M 을 붙이려면(과연 누가..) 다음과 같이 합니다.
:set fileformat=dos

이전버전에서는 다음과 같이 합니다.
:set textmode

2. 프롬프트 상에서
2.1 dos2unix 이용

dos2unix와 unix2dos를 이용하여 변환할 수 있습니다.

다음과 같이 하면 ^M 문자가 없어집니다.
$ dos2unix [문서명](여러 파일의 경우 *.확장자)

그리고 다음과 같이 하면 ^M 문자가 생기죠.
$ unix2dos [문서명]

2.2 cat과 tr을 이용한 방법

다음과 같이 하면 해당 파일의 ^M 문자가 없어집니다.
$ cat dos-file | tr -d ^M > unix-file

2.3 perl 스크립트

다음과 같이 하면 여러파일을 한번에 바꾸게 됩니다.
# perl -i -pe 's/\015//g' *.html


3. 다른 에디터의 사용

pico 라는 에디터 아실겁니다. 기능은 별로 없지만 빠르고 간편하죠.
vi 나 emacs 에서 ^M 으로 잡히는 것이 pico에서는 안 잡히는데, 파일을 pico로 열어서 다시 이 문서를 저장합니다.
그리고 vi 나 emacs 로 읽으면 ^M 이 모두 없어진 것을 알 수 있습니다. 쉽죠?


4. man 페이지의 ^M, ^H 문자

man 페이지를 일반 화일로 바꾸면 ^M, ^H 등이 생기는데 (예, 한컴리눅스 ^H)
다음과 같이 하면 이 문자를 없애고 볼 수 있습니다.

다음은 ls 의 예입니다.

4.1 ps 또는 pdf로 변환하기

man -t [변경시킬화일] > [변경후화일명].ps
man -t [변경시킬화일] > [변경후화일명].pdf

예)
man -t ls > ls.ps 또는 ls.pdf

4.2 텍스로 변환하기

man [변환시킬화일] | col -b> [변환후 화일명].txt

군대 1개월 다녀오면서 많은걸 느꼈네요. ㅎㅎ

덕분에 블로그에 글 쓰는걸 귀찮아 하지 않고 열심히 쓰려 합니다. 


이번편은 C언어 매크로 편이고, 알아두고 쓰면 좋은 C언어 매크로들입니다. 


좋은점: 매크로를 사용하면 컴파일러에서 처리하기 때문에 실행시간이 줄어드는 효과가 있음.

속도에 민감한 프로그램을 작성한다면 꼭 매크로를 사용하는것이 좋음 실예로, MAX(A,B) 매크로 함수를 사용하여 시간 덕을 보았음


매크로를 앞으로 쭈~~욱 업데이트할 예정임 ㅎ


#define ABS(a)(((a) < (0))?-(a):(a))

#define SWAP(ab)(a)^=(b)^=(a)^=(b)

#define LIMIT(vallh)((val)<(l)?(l):(val)?(h)?(h):(val))


#define SAFE_DELETE(xif(xdelete xx = NULL;

#define SAFE_DELETE_ARRAY(xif(xdelete []xx = NULL;

#define SAFE_RELEASE(xif(xx->Release(); x = NULL;

#define SAFE_DELTE_OBJECT(xif(xDeleteObject(x);


#define IS_ARRAY_ACCESS(varmaxval) (0 <= var && var < maxval) ? true : false

#define IS_VALID_VALUE(varminvalmaxval) (minval <= var && var < maxval ) ? true : false


// 조건문매크로

#define IS_TRUE(c)     (c)

#define IS_FALSE(c)(!(c))


#define IS_EXIST(c)(c)

#define IS_NOT_EXIST(c)(!(c))


#define IS_VALID(c)(c)

#define IS_INVALID(c)(!(c))


// 포인터매크로

#define IS_NULL(p)(!(p))

#define IS_NOT_NULL(p)(p)


// 컴파일러가 지원하는 매크로
__FILE__ //현재 파일을 스트링으로 반환한다

__FUNCTION__ // 현재 함수를 스트링으로 반환한다. __func__를 써야할 경우도 있음.

__LINE__ // 현재 줄을 정수로 반환한다.

ex) printf("%d", __LINE__); 을 하면 이 프린트 라인의 라인수를 출력해준다 


라이브이브러리가 될 파일(test.c)
#include <stdio.h>
void func()
{
    printf("Hello World!!\n");
}

라이브러리를 사용하는 프로그램 (app.c)
int main()
{
    func();
    return 0;
}

1. 정적 라이브러리(또는 Archive)

정적라이브러리(또는 Archive)파일이라 불리우고 .a의 확장자를 가진다. 여러개의 오브젝트 파일들을 하나로 묶어 사용하기때문에 Archive파일이라고 부른며 컴파일 시간에 코드를 포함하여 결정하기 때문에 정적 라이브러리라고 부른다. 위의 파일을오브젝트 파일로 컴파일 한다.
# gcc -c test.c
# gcc -c app.c

test.o 파일과 app.o 파일이 생기는데 test.o 파일을 Archive로 묶어 보자. 라이브러리 파일의 작명법은 lib뒤에 이름을 붙이는 것이다.
# ar cr libtest.a test.o

libtest.a 파일이 생성되었을 것이며 이 라이브러리를 사용하여 컴파일 할려면 아래와 같이 한다. -L은 라이브러리 파일의 위치를 지정하며 -ltest가 libtest.a를 지정하게 된다.
#gcc -o  app app.o -L. -ltest

2. 동적 라이브러리

실행 시간에 라이브러리 파일을 찾아 코드를 포함하기 때문에 동적라이브러리라고 부른다. 즉, 정적 라이브러리는 컴파일 시간에 코드를결정하기 때문에 소스가 변경되면 새로 컴파일 해야하지만, 동적 라이브러리의 경우 라이브러리만 교체하는 것으로도 변경이 가능하다.
# gcc -c -fPIC test.c
# gcc -c app.c

-fPIC옵션은 Position-Independent Code의 약자이며 test.o파일을 동적라이브러리로 사용하도록 컴파일 하는 옵션이다. 이렇게 컴파일된 오브젝트 파일을 .so파일로 묶으면 된다.
# gcc -shared -fPIC -o libtest.so test.o

컴파일은 아래와 같이 하면 된다.
# gcc -o app app.o -L. -ltest

만일 libtest.a 파일과 libtest.so 파일이 같이 있을 경우 gcc 컴파일러는 libtest.so 파일을 먼저 지정하게 된다. 만일 libtest.a를 사용하여 컴파일 하고 싶으면 아래와 같이 실행하면 된다.
# gcc -static -o app app.o -L. -ltest

앞으로의 대세는 UTF8이다. 현재는 EUC-KR과 UTF-8 페이지가 많지만

중국어나 아랍어등 다른 나라의 언어를 위해서 UTF-8 이 쓰일  것이다. 그러므로
오늘 알아 볼 것은 아파치, 톰캣, JSP 환경에서 UTF-8 변환을 어떻게 하느냐이다




1. 톰캣 5.5

%TOMCAT_HOME%conf/server.xml 에서


<Connector port="8080" maxHttpHeaderSize="8192" maxThreads="150" minSpareThreads="25" maxSpar
eThreads="75" enableLookups="false" redirectPort="8443" acc 100" connectionTimeout="20000"
disableUploadTimeout="true"
URIEncoding="UTF-8" />

 추가


2. JSP


<%@ page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>

<%
request.setCharacterEncoding("utf-8");
%>   


(rc = crz.SetCharacterEncoding(hc,"utf-8"); <== 내부 API 이므로 다른 분들은 필요 없음)


3. Java Script


URI 넘길때 UTF8 으로 넘기는 방법

q = encodeURIComponent(q); 
//UTF-8 방식일 경우 추가



4. URL 에서 characterset 확인


1. akc.jsp?q=가 <-- 한글
2. akc.jsp?q=%B0%A1 <-- EUC_KR 타입 URI (엠파스 주소창에서
확인)

3. akc.jsp?q=%EA%B0%80 <-- UTF8 타입 URI (구글 주소창에서 확인



5. Apache2

%APACHE2_HOME/conf/httpd-languages.conf 에서 해줘야 되는줄 알았는데
톰캣에서 했으면 굳이 할 필요 없다.
하지만 PHP를 쓴다면 AddDefaultCharset 을 해주길 바란다 (자세한건 검색)

6. 해보진 않은것들 참고사항

JSP

new String(param1.getBytes("8859_1"), "euc-kr");  등등..


<%@ page contentType="text/html; charset=euc-kr" %>
<%@ page import="java.net.URLEncoder" %>
<html>
<head><title>URLEncoder</title></head>

<body>
<%
  String value = "JSP하자";
  String encoded = URLEncoder.encode(value);
  response.sendRedirect("filename.jsp?name=" + encoded);
%>
</body>
</html>

이상이 삽질하며 알아낸 것들이다
1. Apache 2.0, PHP, MySQL 설치하기
(1) 설명 : Apache 2.0.x 버전, PHP, MySQL의 설치순서는 크게 신경쓰지 않아도 되지만 보통 데이터
베이스가 기본이 되므로 MySQL를 설치하고, Apache를 설치한 뒤에 마지막으로 PHP를 설치
하면 된다.
(2) 설치하기
1) Apache ,PHP, MySQL 소스파일(source파일: tar.gz로 된 파일)을 다운받아 /usr/local/srt에
위치시킨다.
예) Apache => www.apache.org
MySQL => www.mysql.com
PHP => www.php.net

2) 다운받은 파일들의 압축을 푼다.
예) tar zxvf mysql-3.23.57.tar.gz
tar zxvf httpd-2.0.47.tar.gz
tar zxvf php-4.3.2.tar.gz
3) 기존의 인스톨된 apache제거하기 : rpm패키지로 설치되어 있는 아파치 웹서버 프로그램을 삭
제한다. 꼭 삭제할 필요는 없지만, 공간도 차지하고 새롭게
설치할 아파치와 충돌될 수도 있다.
ㄱ. 아파치 데몬을 정지시킴 : /etc/rc.d/init.d/httpd stop
=> 아파치 데몬이 작동하지 않을 수도 있다.
ㄴ. 인스톨된 아파치를 찾는다. : rpm -qi apache 또는 rpm -qi httpd
=> 아파치 1.3 버전은 apache라는 이름으로 설치되지만, 2.0버전은 httpd라는 이름으로
설치되므로 두 가지 모두 검색해서 나오는 것을 삭제한다.
ㄷ. 찾아진 아파치를 제거한다.
예) rpm -e httpd --nodeps
4) PHP 및 MySQL도 찾아서 존재하면 삭제한다.
ㄱ. 검색
rpm -qi php
rpm -qi mysql
ㄴ. 삭제
rpm -e php --nodeps
rpm -e mysql --nodeps
5) MySQL 설치하기
ㄱ. mysql 소스파일의 압축을 푼 디렉토리로 이동한다.
예) cd /usr/local/srt/mysql-3.23.57
ㄴ. ./configure --prefix=/usr/local/mysql --with-charset=euc_kr
=> --prefix는 인스톨한 기본 디렉토리를 지정하는 옵션이다. --with-charset=euc_kr은
한글을 지원한다는 뜻이다. 이 옵션을 지정하지 않아도 큰 상관은 없지만 정확한 한글
정렬을 위해 필요하다.
(참고) 기타 많이 쓰는 옵션으로 locatstatedir= 있는데 이것은 DB데이터를 저장할
디렉토리를 지정하는 옵션이다.
예) localstatedir=/usr/local/mysql/data
ㄷ. make
=> 소스이기 때문에 컴파일과정이 필요하다.
ㄹ. make install
=> 컴파일한 것을 실행시켜 설치한다.
ㅁ. 참고: MySQL의 테스트
1. MySQL의 기본 데이터베이스생성하기 : 처음 설치시 한번 꼭 실행한다. 이 작업은 MySQL
기본 데이터베이스인 mysql과 testdb를 설치해준다.
예) /usr/local/mysql/bin/mysql_install_db
2. MySQL데몬을 띄운다. : 설치된 디렉토리로 이동하여 데몬을 띄운다.
예) /usr/local/mysql/bin/safe_mysqld --user=root &
3. 실행
예) /usr/locasl/mysql/bin/mysql -uroot mysql
4. 성공으로 실행됐을 경우 : 다음과 같이 mysql> 이라는 프롬프트가 나타나면 정상적으로
설치된 것이다. quit명령을 내려 데이터베이스에서 빠져나온다.
예) mysql> quit
bye
6) apache 설치하기
ㄱ. apache압축을 푼 디렉토리로 이동한다.
예) cd /usr/local/srt/httpd-2.0.47
ㄴ. ./configure --prefix=/usr/local/apache --enable-mods-shared=most --enable-module=so
=> --prefix는 아파치가 설치될 디렉토리를 지정하는 것이고, --enable-mods-shared=most
와 --enable-module=so는 DSO방식으로 PHP 모듈이 사용될 수 있도록 지정하는 옵션이다.
ㄷ. make
ㄹ. make install
7) php설치
ㄱ. php압축을 푼 디렉토리로 이동한다.
예) /usr/local/srt/php-4.3.2
ㄴ. ./configure --with-apxs2=/usr/local/apache/bin/apxs --with-mysql=/usr/local/mysql
--with-config-file-path=/usr/local/apache/conf --with-exec-dir=/usr/local/apache/bin
--enable-track-vars --enable-trans-sid
=> (설명)
--with-apxs2 는 PHP가 아파치데몬에 DSO 모듈로 로딩되도록 하기 위해서 apxs파일의
위치를 지정하는 것이고 --with-mysql은 MySQL과 연동하기 위해 MySQL이 설치되어 있는
디렉토리를 가리키는 것이다. --with-config-file-path는 php.ini파일의 경로를 지정하는
옵션이고, --with-exec-dir은 아파치데몬의 실행경로는 지정한다. --enable-track-vars는
HTTP_GET_VARS, HTTP_POST_VARS, HTTP_COOKIE_VARS 배열에 있는 GET/POST/COOKIE변수들이
어디서 왔는지 기억하고 있게 만들고 --enable-trans-sid는 보안과 관련된 옵션이다.
ㄷ. make
ㄹ. make install
ㅁ. cp php.ini-dist /usr/local/apache/conf/php.ini
=> 소스디렉토리에 있는 php.ini를 /usr/local/apache/conf디렉토리에 php.ini로 복사한다.
8) httpd.conf설정(/usr/local/apache/conf/httpd.conf의 환경파일을 설정)
ㄱ. ServerName의 항목을 찾아 입력: 도메인이름 또는 IP주소를 입력한다.
ㄴ. DSO support항목에서 아래 모듈부분이 활성화되어있는지 확인한다.
LoadModule php4_module modules/libphp4.so
ㄷ. php관련환경설정 : AddType이라는 항목이 모여있는 곳으로 이동한 뒤 아래와 같이 추가한다.
예)
AddType application/x-httpd-php .php .htm .html .inc .php4 .php3
AddType application/x-httpd-php-source .phps
9) 아파치 데몬을 재가동한다.
예) /usr/local/apache/bin/apachectl restart


2. Apache 2.0, PHP, MySQL 연동 확인
(1) 아파치 테스트하기
1) 설명: 위와 같이 소스로 컴파일하면 아파치 설치디렉토리가 /usr/local/apache가 된다. 웹문서
를 올려서 아파치 웹서버가 동작하는지 확인한다. 웹문서디렉토리는 /usr/local/apache/
htdocs 이다.
2) 방법
ㄱ. /usr/local/apache/htdocs 디렉토리에 작성한 웹문서(index.html)를 올린다.
ㄴ. 아파치데몬의 작동유무를 확인한다. 아래와 같이 재가동해도 된다.
예) /usr/local/apache/bin/apachectl restart
ㄷ. 웹브라우저를 띄우고 확인한다.
예) http://localhost (리눅스의 X-window에서 로컬로 확인할 경우)
http://192.168.0.1 (IP주소로 세팅한 경우)
http://linux.co.kr (도메인으로 세팅한 경우)
(2)아파치와 PHP가 제대로 연동되는지 테스트해보기
1) 설명: test.php라는 간단한 php문서를 phpinfo()라는 PHP정보를 보여주는 함수를 이용해서
작성한 뒤에 웹상에서 불어오도록 한다.
2) 방법
ㄱ. 아래와 같이 test.php 를 만든다.
<?
phpinfo();
?>
ㄴ. 위 파일을 /usr/local/apache/htdocs 디렉토리에 위치시킨다.
ㄷ. 웹상에서 불러본다.
예) http://localhost/test.php
http://192.168.0.1/test.php
http://linux.co.kr/test.php
3) 결과
ㄱ. 설명: php관련정보가 뜬다면 제대로 세팅된 것이다. 만약 정보가 제대로 보이지 않고 소스
즉 위의 내용이 그대로 웹페이지에 보인다면 다음과 같이 해본다.
ㄴ. 오류해결
a. 재부팅하거나 'depmod -a' 명령을 내린다.
=> 관련 새로 설치된 PHP관련 모듈이 라이브러리로 올라가지 않아서 그럴수도 있으니 재부
팅하면 리눅스서버에서 관련 모듈들을 다시 읽어들이므로 PHP가 정상적으로 작동한다.
b. 재부팅해서 안되면 아파치와 PHP 설치시 환경설정 오류일 수 있으니 아파치와 PHP를 다시
컴파일한다. 기존의 압축파일을 지우고 tar파일을 다시 풀고 설치해도 되고, 아니면
make clean명령으로 지정한 설정을 초기화한뒤 다시 configure 부터 해도 된다.
(3) PHP 설치후에 Form태그와의 연동에 대하여
1) 설명: PHP 4.2.x 버전부터 php.ini의 항목중에 register_globals라는 값이 Off되어 있다. 보안
상 이 값이 Off가 되어 있다. (설치시에 컴파일을 다 끝내면 화면에 메시지로 찍힌다.)
만약 이 값을 On하지 않고 Form태그를 이용해서 MySQL에 데이터를 입력하면 값이 무조건
공백으로 들어간다. 이 값을 On 해야 된다.
2) 방법
1) vi /usr/local/apache/conf/php.ini 로 파일은 연다.
2) register_globals=On 으로 바꾼다.
3) 아파치를 재시작한다. ( PHP는 환경설정이 바뀌면 아파치에 모듈화에서 설치되어 있으므로
아파치만 재시작하면 자동으로 관련설정이 바뀐다.)
예) /usr/local/apache/bin/apachectl restart





--------------empas 에서 퍼옴 -----------------

어디서나 쓰기 편하게 하기 위해 인터넷폰
고정아이피를 계속 쓰기 불편해서
서버에서 유동 아이피로 바꿨습니다.


우분투에서는 간단히 가능하더군요 ~ 간단한 설정만 바꿔주면 됩니다 ㅎ

순서대로 따라해봅시다~


1. DHCP 데몬을 설치 합니다.

: 저는 가장 인스톨이 편리한 우분투를 쓰기 때문에 -_-; 우분투대로 합니다.
컴파일 하는건 알아서 하시길;;;(쿨럭)

$> apt-get install dhcp3-server
=> dhcp3-server가 설치 됩니다.  하지만
$> dhcp-server [fail]
이 뜨죠. 설정이 안되서 DHCP 서버가 작동을 안합는 겁니다.




2. DHCP 설정을 해봅시다


$> vi /etc/dhcp3/dhcpd.conf

열면 여러 설정 옵션들이 보입니다. 아래와 같은줄을 찾아서
# 주석 처리를 없애주고 넣어 봅시다

option domain-name-servers 210.107.128.31, 168.126.63.1;

 subnet 192.168.0.0 netmask 255.255.255.0 {
    range dynamic-bootp 192.168.0.2 192.168.0.200;
    option broadcast-address 10.254.239.31;
    option routers 192.168.0.1;
  }


위의 뜻은 도메인 서버를 210.107.128.31 그리고 보조 도메인 서버를 168.126.63.1 로 설정하는겁니다

그리고 192.168.0.0 network 에 netmask 를 255.255.255.0 으로 설정합니다.
아래 설정은 레인지 입니다. 192.168.0.2 부터 200 까지로 했습니다. 최대 198개 되겠군요.
물론 그럴일은 없겠지만;
기본 게이트 웨이 설정은 192.168.0.1 로 해놓으면 완료! 응용은 알아서 하시길 ^^

dhcp로 해놓으니 잘되는군요 ㅎ

한결 편해졌습니다. 여러명이 쓰거든요 ㅋ


+ Recent posts