'리눅스'에 해당되는 글 5건
- 2006/12/22
- 2006/07/09
- 2006/04/28
- 2006/03/27
- 2006/03/23


| backspace | URL, 파일 이름을 이용해서 torrent 를 추가한다. 디렉토리 내용을 보고 자동 완성하려고 Tab 키를 이용할 수 있다. 이때 ~/torrent/* 같이 와일드 카드 문자를 사용해서 입력하는 것이 가능하다. |
| return | torrent 를 비 활성화된 상태로 남긴다는 점을 제외하면 backsapce 와 동일한 기능을한다. (활성화 단축키 ^s ) |
| ^O | 선택된 torrent 를 위한 새로운 다운로드 디렉토리를 설정한다. torrent 가 아직 활성화된 상태가 아닐때만 동작한다. |
| ^s | 다운로드 시작. (완료 직전 이라면 해싱 작업을 먼저 시작한다) |
| ^d | 다운로드 중지. 혹은 정지된 다운로드를 제고 |
| ^r | 다운로드와 무관하게 torrent 의 해싱 체크를 시작한다. |
| a/s/d | 1/5/50 KB 씩 업로드 대역폭 증가. |
| z/x/c | 1/5/50 KB 씩 업로드 대역폭 감소. |
| A/S/D | 1/5/50 KB 씩 다운로드 대역폭 증가. |
| Z/X/C | 1/5/50 KB 씩 다운로드 대역폭 감소. |
| ^q | 프로그램 종료. (중복으로 명령을 내리면 트래커와 주고받는 신호를 무시하고 종료한다.) |
| up/down | torrent 선택 |
| left | 이전 화면으로 복귀 |
| right | 다운로드 뷰로 전환 |
| ^r | 토런트의 해시 체크 시작 |
| +/- | 토런트의 우선 순위 변경 |
| l | 로그 보기. Space 키로 종료 |
| M-1 | 모든 다운로드 내역 보기 |
| M-2 | 이름 순으로 모든 다운로드 내역 보기 |
| M-3 | 시작된 다운로드 내역 보기 |
| M-4 | 정지된 다운로드 내역 보기 |
| M-5 | 완료된 다운로드 내역 보기 |
| M-6 | 해싱중인 다운로드 내역 보기 |
| right | 토런트 파일 리스트로 전환 |
| left | 메인 뷰로 전환 |
| 1/2 | 최대 업로드 조절 |
| 3/4 | 최소 피어수 조절 |
| 5/6 | 최대 피어수 조절 |
| o | 트리커 리스트 출력.스페이스바로 한 구룹내의 트래커들을 순환. * 키를 이용해 선택된 트래커 의 활성화 설정을 토글 |
| p | 피어와 토런트 정보를 보기 |
| t/T | 트래커 요청 시작. 대문자 T를 이용하면 최소 요청 간격을 무시하고 강제로 요청을 할 수 있음. |
| u | 전송 내역 보기 |
| i | Chunk 빈도 보기 |
| left | 다운로드 뷰로 전환 |
| space | 파일 우선 순위 변경 |
| * | 모든 파일의 우선 순위 변경 |
2.5 소켓 관련 UNIX 시스템 콜
2.5.1 signal()
▶ 유닉스 시스템에서 어떤 이벤트(event)가 발생하면 이것을 프로세스 사이에
알리는 수단으로 시그널이 사용된다.
표 2-3 소켓 관련 시그널 종류
SIGINT | 인트럽트 키(Ctrl+C) 입력시 발생 |
SIGFPE | 부동 소수점 연산 에러를 나타냄 |
SIGIO | I/O가 가능한 상태를 나타냄. |
SIGURG | Out-of-band 데이터 도착과 같은 긴급한(urgent) 소켓 상태를 나타냄. |
▶ 시그널이 발생하였을 때 유닉스 커널이 제공하는 디폴트 처리 내용 대신 다른
동작을 수행하도록 하려면 signal() 시스템 콜을 사용한다. 아래에서 signal
(SIGIO, sigio_func) 호출 후 SIGIO 시그널이 발생하면 sigio_func() 함수가 수행
된다.
#include <signal.h>
int sigio_func(); /* 사용자 정의 함수 선언 */
main() {
signal(SIGIO, sigio_func); /* 시그널 처리 함수 지정 */
:
}
int sigio_func() {
/* SIGIO 시그널 발생시 처리 내용 */
}
▶ 어떤 시그널이 발생하였을 때 이를 단순히 무시하려면 다음과 같이 무시할 시
그널의 종류(예를 들면 SIGIO)를 지정하고 옵션으로 시그널 무시(SIG_IGN)를 선
택한다.
signal(SIGIO, SIG_IGN);
■ signal_test.c
● 카운터 프로그램이 실행되는 도중에 사용자가 Ctrl-C를 입력하면 시그널 SIGINT
가 발생하는데, 이 때 프로그램이 종료되는 것이 아니라 my_signal()이라는 함수가
호출된다.
● 실행예
> signal_test
0
1
^C
Ctrl-C pressed.
2
3
^C
Ctrl-C pressed.
4
^C
Ctrl-C pressed.
>
● 프로그램 리스트
/*--------------------------------------- int main() { printf("singal() error\n"); /* 시그널 처리 함수 정의 */ signal(SIGINT, my_signal); /* signal()을 다시 호출함 */ return 0; |
2.5.2 fork()
▶ 유닉스에서 프로세스는 fork()를 이용해서 자신과 똑같은 기능을 수행
하는 프로세스를 하나 복제할 수 있다.
▶ 두 프로세스는 프로그램 코드, 스택, 파일기술자, 소켓번호 등은 공유하나, 변
수들은 공유하지 않는다.
▶ fork()가 불리면 그 순간에 하나의 프로세스가 두 개의 프로세스로 되는데, 두
프로세스는 수행할 일을 구분하기 위하여 두 프로세스의 fork() 리턴문이 서로 다
르다는 것을 이용한다.
▶ 새로 생긴 자식 프로세스의 ID 번호(PID: Process Identification)는 부모 프로
세스의 PID와 구별된다.
▶ 부모 프로세스에게는 fork()의 리턴값으로 새로 생성된 자식 프로세스
의 PID가 리턴되며 자식 프로세스의 fork()의 리턴값은 0이 된다.
그림 2-14 fork()의 수행과정
▶ 프로세스의 작업 구분 예
int PID;
PID = fork();
if(PID == 0) {
child_work(); /* 자식 프로세스용 코드 */
} else {
parent_work();/* 부모 프로세스용 코드 */
}
■ fork_test.c
● 부모와 자식 프로세스가 같은 이름의 변수를 각각 증가시키고 그 결과를 확인한
다.
●프로그램 리스트
/* ---------------------------------------------------- int main(void) { /* 자식 프로세스 */ /* 부모 프로세스 */ |
● 실행예
> fork_test
CHILD - my pid is 12557 and parent's pid is 12556
global var : 1
local var : 1
PARENT - my pid is 12556 and child's pid is 12557
global var : 5
local var : 5
▶ 여기서 부모 프로세스가 global_var과 local_var을 각각 5씩 증가시켰
는데 6이 되지 않고 5가 되었다는 사실에 주목하자!! (파일이나 소켓은 공
유하지만 변수는 공유하지 않는다)
다중 사용자의 connect 를 처리하기 위한 방법은 총 3가지의 방식으로 구분한다.