Passion 456

vim 7.0에서 탭윈도우 사용하기

Vim 7.0에서 나온 기능 중에 하나가 탭 윈도우이다. 탭윈도우는 기존에 screen을 통해서 여러 윈도우 사이를 변경하는 불편함을 줄여준다. 사용 방법: 1. 여러개를 한꺼번에 열때 vim -t a.txt b.txt c.txt 2. 현재 vi창에서 새 탭으로 열기 :tabnew b.txt (b.txt가 존재하면 열고, 없으면 새로 만들어서 연다) :tabf b.txt (b.txt가 존재하면 열고, 없으면 에러 발생) 3. 탭 사이 이동 :tabp (이전 탭으로 이동) :tabn (다음 탭으로 이동) :tabfirst (:tabfir 처음 탭으로 이동) :tablast (마지막 탭으로 이동) 4. 열려 있는 탭의 종류 :tabs 5. 탭의 배열 변경 (이동을 원하는 창에서) :tabm 은 원하는 위치 ..

Passion/Programming 2007.01.25

C코드 파싱한 정보 분석

우연히 C코드의 AST는 어떻게 만들어 질까에 대해서 검색을 하다가 gcc의 파싱 정보를 보여주는 옵션을 발견하였다. [CODE type=C] int main() { int a=0; a++; return 0; } [/HTML][/CODE] #gcc -fdump-translation-unit hello.c 이 옵션을 주면 hello.c.tu 라는 파일이 생성되고 파싱된 정보를 기록합니다. 하지만 아직까지 파싱된 정보를 해석하는 방법은 잘 몰라요 ㅋㅋ 이외에 cpp 클래스를 분석하는 옵션도 있다. (hello.cpp가 있다고 가정할떄) #gcc -fdump-class-hierarchy hello.cpp 이옵션을 주면 hello.cpp.class라는 파일이 생성되고 클래스 상속관계를 보여준다. 이 놈도 아직 ..

Passion/Programming 2007.01.25

동적 라이브러리 만들기

동적 라이브러리 만들기는 정적 라이브러리 만들기와 매우 유사하다. 단지 컴파일 방법이 다르고, 내부 동작 메커니즘이 다를 뿐이다. 간단하게 hello, library world를 찍는 동적 라이브러리를 생성하고, 이를 사용하는 방법에 대해서 알아보도록 하겠다. 동적 라이브러리 파일 (libhello.c) [CODE type=C] /* shared library file */ #include void hello(void) { printf("Hello, library world\n"); } [/HTML][/CODE] 컴파일 하기 (Position Independet Code) # gcc -fPIC -o libhello.o -c libhello.c 공유라이브러리로 만들기 # gcc -shared -c libh..

Passion/Programming 2007.01.17

정적라이브러리

우리가 프로그램을 보면서 쉽게 접할 수 있는 xxxx.a 의 형식으로 된 파일을 말한다. 정적라이브러리는 단순히 오브젝트파일들의 묶음으로 보면 된다. 우리가 어떤 C파일을 오브젝트 코드(xxx.o)로 컴파일하고 나서 이런 오브젝트 파일들을 압축툴(ar)을 이용하여 하나의 정적라이브러리 파일로 생성하는 것이다. 이는 최근에는 많이 사용되지 않는 방법이지만, 라이브러리는 공개하고 소스는 공개하고 싶지않을 때 사용하는 방법이라고 보면 된다. 장점 : 정적 라이브러리는 사용자들이 프로그램을 다시 컴파일하지 않아도 링크시킬수 있도록 해주기 때문에, 컴파일 시간을 줄여준다. 정적 라이브러리를 만드는 방법 : ar rcs mylibrary.a file1.o file2.o 이 예제 명령은 오브젝트 파일 file1.o,..

Passion/Programming 2007.01.09

shell 에서의 리다이렉션 종류

셀에서 사용되는 리다이렉션의 대해서 알아보자. 0 : 입력 1 : 출력 2 : 에러 종류의미 출력방향을 바꾼다. >> 출력에 덧붙인다. 2> 에러의 방향을 바꾼다. &> 입력방향을 바꾼다. >& 입력방향을 바꾼다(권장). 1>&2 출력을 에러로 내보낸다. 2>&1 에러를 출력으로 내보낸다. >| 출력을 리다렉션할 때 noclobber설정을 무시힌다 filename 장치파일(/dev)이면, 표준출력,표준입력 등에 모두 사용된다.

Passion/Programming 2006.12.28

ftp 포트 이야기(20,21번)

ftp는 일반적으로 두개의 포트를 사용한다. 20,21 번 포트를 사용하는데 두개의 포트가 열리는 방법이 다르다. 처음 ftp 클라이언트가 21번을 통해서 ftp서버에 접속을 하면 제어와 관련된 세션이 열리게 된다, 다음으로 데이터를 전송하기 위해서 거꾸로 ftp서버에서 ftp client로 서버의 20번 포트를 사용하여 클라이언트에 접속하게 된다. 따라서 일반적으로 방화벽 설정이 서버로 들어오는 포트에 대해서 제어를 하고 나가는 포트에 대해서 제어를 하지 않기 때문에 21번 들어오는 포트만 설정하여도 ftp가 접속되게 된다.

Passion/Network 2006.12.19

지도서비스를 이용한 traceroute

네트워크 관리시스템을 만들다 보면 문제 해결을 위해서 traceroute를 할 경우가 많다. 이 때 traceroute를 하여 나오는 장비의 IP는 알 수 있지만 이 장비가 어디에 위치한 장비 인지를 알 방법은 없다. 물론 IP만 가지고 장비의 위치를 파악하는 것은 불가능하다. 따라서 부가적인 정보가 필요함은 당연한 일이다. 장비의 위치는 NMS(Network Management System)에서 가지고 있다. Traceroute를 해서 얻은 정보와 NMS에서 받은 장비의 위치를 바탕으로 지도위에 tracerouting 되는 패스를 그리는 프로그램을 작성해 보자!

Passion/My Idea 2006.12.04

single linked list에서 루프를 찾는 방법

- 오늘의 퀴즈입니다. 1) single linked list에서 루프가 존재하는지를 구하는 방법 hint) 거북이와 토끼의 경주에서 산꼭대기를 향해서 뛰어가지 않고, 트랙을 돌고 있다면? 답) 거북이와 토끼는 처음 만나서 경주를 하게 됩니다. 토끼는 육상 선수여서 그런지 엄청빠른 속도로 달릴 수가 있지요. 그에 비해 거북이는 엉그적 엉그적 느리게 걸어갑니다. 출발 소리를 들리고 토끼가 잽싸게 뛰쳐 나가죠. 이 놈의 속도를 측정하니 거북이의 두배나 빨랍답니다. 이에 비해서 거북이는 세월아 내월아 천천히 걸어가고 있었어요. 그런데 사실 토끼와 거북이의 경주는 산을 향해서 달리고 있었던게 아니었어요. 산꼭대기로 난 길이라고 생각했지만 산 주위를 계속 돌고 있는 길이었죠. 기억력이 나쁜 토끼는 자신이 산 주위..

Passion/Algorithm 2006.11.22

Merge sort

머지 소트의 기본 개념은 Divide and Quanqer 알고리즘이다. 리스트를 소트된 순서대로 쪼개가면서(1개의 엘리멘트가 나올때까지) 짜른 다음 두개의 리스트를 하나로 순서대로 합해가면서 소팅을 한다. * 간단하게 파이슨으로 머지소트를 구현해 보면 다음과 같다. 1 def mergesoft(list): 2 if len(list) 0 and len(right) > 0: 24 if left[0] 0: 29 for item in left: 30 result.append(item) 31 if len(right) > 0: 32 for item in right: 33 result.append(item) 34 return result

Passion/Programming 2006.11.21