1. corkscrew 를 다운로드 및 설치
1.1. http://www.agroman.net/corkscrew/ 에서 구할 수 있다. wget을 이용하여 다운로드.

1.2. 설치
# configure; make; make install

1.3. /usr/local/bin/corkscrew 가 설치되었음을 확인.

2. git proxy를 위한 스크립트 작성
2.1. /usr/local/bin/gitproxy.sh 작성
#!/bin/bash
/usr/local/bin/corkscrew <Proxy IP> <Port> $*

2.2. ~/.bashrc 에 다음 추가
$ export GIT_PROXY_COMMAND=/usr/local/bin/gitproxy.sh


참고 : http://cafe.naver.com/embeddedcrazyboys.cafe?iframe_url=/ArticleRead.nhn%3Farticleid=4981
Tag // corkscrew, git, Proxy

git daemon 서버 설정

from Linux 2010/06/24 16:44

/pub/repo 에 "git clone git://xxx.xxx.xxx.xxx/repo/kernel kernel" 과 같이 하여 repository를 설정하였다면

# git daemon --verbose --export-all --base-path=/pub/repo --detach

git://<새 서버>/pub/repo/kernel 등의 URL로 접근이 가능.

touch .git/git-daemon-export-ok

git config daemon.receivepack="true"

0. 한글 입력이 필요할 경우 다음과 같은 스크립트를 ~/bin 아래에 적당한 이름으로 작성합니다.

#!/bin/bash
export LANG=ko_KR.EUC-KR
export LC_ALL=ko_KR.EUC-KR
export XMODIFIERS="@im=nabi"
export GTK_IM_MODULE=hangul3f
export GDK_USE_XFT=1
nabi &
절대경로의 실행 프로그램 파일

1. "시작" -> "프로그램" -> "Xming" -> "XLaunch"
2. "Multiple windows" 선택 -> "다음(N)"


3. "Start a program" 선택 -> "다음(N)"

4. "Start program" 에 실행한 파일 이름을 적고(필요하면 절대 경로 포함),
(한글 설정 스크립트의 경우 ~/bin/스크립트명)
"Run Remote" 에 "Using PuTTY(plink.exe)" 를 선택하고,
"Connect to computer" 에 host 주소를, "Login as user" 에 id를, "Password" 에 말 그대로 password를 적는다
-> "다음(N)"

5. PuTTY가 설치된 경로(한글 PuTTY의 경우 C:\Program Files\iPutty)에서 plink.exe 를 선택한다.

6. Font dpi 설정을 위해 "Addtional parameters for Xming" 에 "-dpi 100" 을 적는다. -> "다음(N)"

7. "Save configuration" 을 눌러 바탕화면에 "runStart.xlaunch" 와 같이 저장한다. -> "마침"
 "Include PuTTY password as insecure clear text" 에 체크하면 패스워드를 입력할 필요는 없지만 저장된 파일 안에 패스워드가 그대로 저장되어 보이게 되므로, 취향에 따라 체크하도록 한다.




Ascii code 표

from Development 2010/06/09 13:40
Binary Oct Dec Hex Abbr PR[t 1] CS[t 2] CEC[t 3] Description
000 0000 000 0 00 NUL ^@ \0 Null character
000 0001 001 1 01 SOH ^A Start of Header
000 0010 002 2 02 STX ^B Start of Text
000 0011 003 3 03 ETX ^C End of Text
000 0100 004 4 04 EOT ^D End of Transmission
000 0101 005 5 05 ENQ ^E Enquiry
000 0110 006 6 06 ACK ^F Acknowledgment
000 0111 007 7 07 BEL ^G \a Bell
000 1000 010 8 08 BS ^H \b Backspace[t 4][t 5]
000 1001 011 9 09 HT ^I \t Horizontal Tab
000 1010 012 10 0A LF ^J \n Line feed
000 1011 013 11 0B VT ^K \v Vertical Tab
000 1100 014 12 0C FF ^L \f Form feed
000 1101 015 13 0D CR ^M \r Carriage return[t 6]
000 1110 016 14 0E SO ^N Shift Out
000 1111 017 15 0F SI ^O Shift In
001 0000 020 16 10 DLE ^P Data Link Escape
001 0001 021 17 11 DC1 ^Q Device Control 1 (oft. XON)
001 0010 022 18 12 DC2 ^R Device Control 2
001 0011 023 19 13 DC3 ^S Device Control 3 (oft. XOFF)
001 0100 024 20 14 DC4 ^T Device Control 4
001 0101 025 21 15 NAK ^U Negative Acknowledgement
001 0110 026 22 16 SYN ^V Synchronous Idle
001 0111 027 23 17 ETB ^W End of Trans. Block
001 1000 030 24 18 CAN ^X Cancel
001 1001 031 25 19 EM ^Y End of Medium
001 1010 032 26 1A SUB ^Z Substitute
001 1011 033 27 1B ESC ^[ \e[t 7] Escape[t 8]
001 1100 034 28 1C FS ^\ File Separator
001 1101 035 29 1D GS ^] Group Separator
001 1110 036 30 1E RS ^^ Record Separator
001 1111 037 31 1F US ^_ Unit Separator
111 1111 177 127 7F DEL ^? Delete[t 9][t 5]

 

Binary Oct Dec Hex Glyph
010 0000 040 32 20 space
010 0001 041 33 21 !
010 0010 042 34 22 "
010 0011 043 35 23 #
010 0100 044 36 24 $
010 0101 045 37 25 %
010 0110 046 38 26 &
010 0111 047 39 27 '
010 1000 050 40 28 (
010 1001 051 41 29 )
010 1010 052 42 2A *
010 1011 053 43 2B +
010 1100 054 44 2C ,
010 1101 055 45 2D -
010 1110 056 46 2E .
010 1111 057 47 2F /
011 0000 060 48 30 0
011 0001 061 49 31 1
011 0010 062 50 32 2
011 0011 063 51 33 3
011 0100 064 52 34 4
011 0101 065 53 35 5
011 0110 066 54 36 6
011 0111 067 55 37 7
011 1000 070 56 38 8
011 1001 071 57 39 9
011 1010 072 58 3A :
011 1011 073 59 3B ;
011 1100 074 60 3C <
011 1101 075 61 3D =
011 1110 076 62 3E >
011 1111 077 63 3F ?
Binary Oct Dec Hex Glyph
100 0000 100 64 40 @
100 0001 101 65 41 A
100 0010 102 66 42 B
100 0011 103 67 43 C
100 0100 104 68 44 D
100 0101 105 69 45 E
100 0110 106 70 46 F
100 0111 107 71 47 G
100 1000 110 72 48 H
100 1001 111 73 49 I
100 1010 112 74 4A J
100 1011 113 75 4B K
100 1100 114 76 4C L
100 1101 115 77 4D M
100 1110 116 78 4E N
100 1111 117 79 4F O
101 0000 120 80 50 P
101 0001 121 81 51 Q
101 0010 122 82 52 R
101 0011 123 83 53 S
101 0100 124 84 54 T
101 0101 125 85 55 U
101 0110 126 86 56 V
101 0111 127 87 57 W
101 1000 130 88 58 X
101 1001 131 89 59 Y
101 1010 132 90 5A Z
101 1011 133 91 5B [
101 1100 134 92 5C \
101 1101 135 93 5D ]
101 1110 136 94 5E ^
101 1111 137 95 5F _










































영문 위키피디아에서 참조
Text is available under the Creative Commons Attribution-ShareAlike License; additional terms may apply. See Terms of Use for details.
현재 스레드 외부에다 작업을 시작하도록 지시하고 끝나기를 기다릴 때 사용. 세마포어를 LOCKED 상태로 하여 사용할 수도 있지만, 세마포어는 거의 항상 세마포어를 획득할 수 있을 때에 치중하여 최적화되어 왔다. 따라서 이럴 때는 completion 을 사용하는 것이 좋다. 구현은 kernel/sched.c 를 참조.

1. completion 초기화
<linux/completion.h>를 포함하여야 한다. 자료 타입은 struct completion.

1.1. Compile time 초기화
DECLARE_COMPLETION(my_completion);
1.2. Runtime 초기화
struct completion my_completion;
/* ... */
init_completion(&my completion);

2. 완료 기다리기
인터럽트가 불가능한 대기(죽일 수 없는 프로세스를 만들 수도 있다)를 수행한다. LONG_MAX 만큼 대기.
void wait_for_completion(struct completion *c);
timeout 이 있는 인터럽트가 불가능한 대기. timeout 값을 리턴한다. 따라서 expire 되면 0을, 완료되면 남은 timeout 값(jiffies 값)을 리턴한다.
unsigned long wait_for_completion_timeout(struct completion *x, unsigned long timeout);
인터럽트가 가능한 대기를 수행한다.(추가필요:인터럽트 받으면 바로 리턴?)
int wait_for_completion_interruptible(struct completion *x);
인터럽트가 가능한 대기의 timeout 버전
unsigned long wait_for_completion_interruptible_timeout(struct completion *x, unsigned long timeout);
죽일 수 있는 대기(TASK_WAKEKILL | TASK_UNINTERRUPTIBLE)를 수행한다.(추가 필요:kill받으면 바로 리턴?)
int wait_for_completion_killable(struct completion *x);
Blocking 없는 wait_for_completion. complete 되지 않았으면 바로 0을 리턴한다.
bool try_wait_for_completion(struct completion *x);

3. 완료 이벤트 알리기
completion을 기다리는 스레드(waiter)가 있는지 확인한다. waiter가 있으면(wait_for_completion()이 진행 중이면) 0을, 없으면 1을 리턴한다.
bool completion_done(completion *x);
대기 중인 스레드 하나만 깨우기
void complete(struct completion *c);
모든 스레드 깨우기
void complete_all(struct completion *c);

4. 재사용을 위해 다시 초기화하기
INIT_COMPLETION(struct completion c);

5. 모듈 종료 함수에서 종료 후 완료를 기다리리고 알릴 때(나중에 추가하기:이 함수 없어졌나?)
void complete_and_exit(struct completion *c, long retval);