'-'에 해당되는 글 135건
- 2009.07.09 페널티킥 심리전
- 2009.07.08 centos 와 telnet
- 2009.07.08 개밥바라기 별, 바리데기
- 2009.07.07 route print
- 2009.07.03 ARP, RARP, ICMP
- 2009.07.02 TCP/IP vs OSI 7 Layer
- 2009.06.25 배열과 포인터에 관한문제
- 2009.06.25 포인터 세번째, 여러가지 포인터 비교
- 2009.06.23 포인터와 함수.
- 2009.06.23 C 포인터 와 scanf buf에 대해
예전것/웃긴거2009. 7. 9. 11:15
카테고리 없음2009. 7. 8. 19:41
Reading2009. 7. 8. 18:48
예전부터 읽고 싶었던 책 - 개밥바라기 별을 동대문 도서관에서 빌렸다 !! 이젠 인기가 시들해진 책이다. 1년이나 지났으니..
책을 읽었는데 시점이 왜이렇게 많이 변하는지. 다른 인물의 다른 시점으로 얘기를 풀어나가고, 안그래도 난독증이 좀 있는것 같은데 책이 눈에 들어오지 않았다. 사실 황석영작가의 명성을 익히 알고있던 터라 중학교때 부터 황작가님의 소설 장길산을 읽어보려고했는데 어휘가 후덜덜하여 관뒀다. 한국말인데...
개밥바라기 별은 성장 소설. 사랑하고 꿈을 찾고. 자유롭게 하고 싶은것을 신나게 해보는 . 젊은 시절에 하지 않으면 못하는 것들이다. 좌절하고 일어나고 다시 걷고
사실 개밥바라기 별을 읽고 전달하려는 메시지가 뭔지, 책을 읽긴 한건지.. 하는 생각이 들어서 황작가님의 '바리데기'라는 책을 한권 더 읽었다.
바리. 버려진 아이라는 뜻으로 지었다고 생각한 이름. 실제 무당들이 '바리'를 자신들의 원형 신화로 여기고있다고한다. 타고난 영매로 태어난 바리. 갖은 고생을 다 겪으며 삶을 헤쳐나간다. 바리에게 영적인 기질이 있어서 힘들때 할머니, 칠성이(강아지, 7번째로 태어났다. 바리랑 비슷한 운명..그래서 더 애착이 갔다고했다)등을 떠올리며 나아갈 길에 대한 도움을 받는다....
이 소설에서는 9.11 테러, 남북 분단의 상황. 영국 지하철 테러 등 세계의 끊임없는 분쟁을 보여준다. 분쟁은 끝나지 않고 끝날 수 없다. 하지만 우리는 희망을 찾는다. 큰 세력앞에 바리는 나약한 개인이다. 아이러니하게도 우리는 평화를 위해 전쟁을 한다. 마지막 버스가 터지는 부분에서 바리는 그냥 운다. 평화는 계속 될수 없고. 우리는 싸운다. 하지만 사람에 대한 믿음을 끊어선 안된다. 바리가 샹이언니 때문에 자식이 죽게 되어 샹이 언니(이름부터 욕이다.)를 미워하지만 샹이 언니가 죽게되었을때 바리는 샹이 언니를 미워한것에 대해 후회하는 대목에서 볼때 우리는 같이 살아가는 존재이다. 희망은 사람에게서 있다. 라는 메시지를 전해주고있는것같다.... 흠;
카테고리 없음2009. 7. 7. 22:40
1. 윈도우의 라우팅 테이블을 설명하라
cmd - route print 치면 좌락 나온다. 아래는 해석
목적지 넷마스크 게이트웨이 인터페이스 메트릭
0.0.0.0 0.0.0.0 192.168.0.1 192.168.0.121 30
목적지 0.0.0.0 은 라우팅 테이블의 목적지 0.0.0.0 아래서 지정한 목적지 주소 이외의 모든 목적지 주소를 의미한다. 즉, 라우팅 테이블에서 직접 구체적으로 지정한 주소 이외의 모든 목적지 주소와 서브넷 마스크는 NIC 192.168.0.1 인터페이스를 통해서 게이트웨이 192.168.0.1 인터페이스로 보내라는 의미다.
목적지 넷마스크 게이트웨이 인터페이스 메트릭
127.0.0.0 255.0.0.0 127.0.0.1 127.0.0.1 1
이것은 자신의 인터페이스 이자 루프백 주소인 127.0.0.1이 목적지 127.0.0.0로 향하기 위해서는 자신의 이너페이스이자 루프백 주소인 127.0.0.1을 게이트웨이로 사용한다는 의미다. 이주소는 TCP/IP 프로토콜 서비스가 제대로 작동하는지 확인하기 위한 것이며, NIC가 없어도 시스템이 가상 IP주소를 갖고있다.
목적지 넷마스크 게이트웨이 인터페이스 메트릭
127.0.0.0 255.0.0.0 127.0.0.1 127.0.0.1 1
http://www.voiceportal.co.kr/615
여기에 설명되었다.
cmd - route print 치면 좌락 나온다. 아래는 해석
목적지 넷마스크 게이트웨이 인터페이스 메트릭
0.0.0.0 0.0.0.0 192.168.0.1 192.168.0.121 30
목적지 0.0.0.0 은 라우팅 테이블의 목적지 0.0.0.0 아래서 지정한 목적지 주소 이외의 모든 목적지 주소를 의미한다. 즉, 라우팅 테이블에서 직접 구체적으로 지정한 주소 이외의 모든 목적지 주소와 서브넷 마스크는 NIC 192.168.0.1 인터페이스를 통해서 게이트웨이 192.168.0.1 인터페이스로 보내라는 의미다.
목적지 넷마스크 게이트웨이 인터페이스 메트릭
127.0.0.0 255.0.0.0 127.0.0.1 127.0.0.1 1
이것은 자신의 인터페이스 이자 루프백 주소인 127.0.0.1이 목적지 127.0.0.0로 향하기 위해서는 자신의 이너페이스이자 루프백 주소인 127.0.0.1을 게이트웨이로 사용한다는 의미다. 이주소는 TCP/IP 프로토콜 서비스가 제대로 작동하는지 확인하기 위한 것이며, NIC가 없어도 시스템이 가상 IP주소를 갖고있다.
목적지 넷마스크 게이트웨이 인터페이스 메트릭
127.0.0.0 255.0.0.0 127.0.0.1 127.0.0.1 1
http://www.voiceportal.co.kr/615
여기에 설명되었다.
예전것/네트워크 보안2009. 7. 3. 23:55
ARP (Address Resolution Protocol)
ARP는 주소 변환이 필요할때마다 각각의 주소를 매핑하도록 호출된다. ARP는 선택된 매체에 브로드캐스트를 통해 특정 IP주소를 사용하는 호스트가 응답을 하도록 요구 하는방식을 사용한다. 목적지 호스트가 응답하는 경우 송신 호스트는 목적지 호스트와 연결을 맺고 데이터를 전송하기 시작한다. ARP의 요구와 응답은 물리적인 계층에서 이루어지며, 목적지 호스트가 응답하는 경우 송신지 호스트는 ARP테이블을 설정하고, ARP테이블의 정보를 이용하여 하위 계층 프로ㅗ콜의 프레임에 저장한다.
RARP(Reverse Address Resolution Protocol)
데이터 링크 계층의 주소로부터 네트워크 계층의 주소를 얻어오는 프로토콜,
RARP패킷은 ARP패킷과 동일한 형식을 갖는다.
ICMP(Internet Control Message Protocol)
IP 프로토콜은 비연결형으로 패킷이 확실히 전송된다는 보장이 없기 때문에 라우터나 노드(호스트)등에서 오류가 생겨 목적지까지 도달하지 못하게 되는 경우가 생긴다. 이럴경우 송신측의 사애를 알려줘야 하는데, 이때 필요한것이 ICMP 포로토콜.
ICMP Destination Unreachable
- 라우터가 특정 노드의 패킷을 목적지에 보내지 못한경우 송신노드에 대해 ICMP Destination Unreachable 메시지를 보낸다.
ICMP Redirect 메시지
- 라우터가 송신측 노드에 적합하지 않은 경로로 설정되어 있을 경우 그 노드에 대한 최적화된 경로를 다시 지정해주는 ICMP Redirect 메시지를 보낸다.
ICMP Time Exeeded
- 패킷이 네트워크 사이에서 무한정 돌아가지 않도록 하기 위해 각 라우터들이 패킷을 처리할때마다 TTL(Time To Live)을 감소시키다 그 값이 '0'이 되면 패킷을 패키하기위해 송신측 라우터에 ICMP Time Exeeded 메시지를 되돌려보냄으로써 패킷이 폐기된 사실을 알림
ICMP Source Quench
- 송신측 큐값이 '0'으로 남아 송신 불능 상태가 되면 'ICMP Source Quench 메시지'를 송신측 노드에 보내고 송신측은 이를 보고 송신 패킷의 양을 제어
ICMP Echo Request
- 송신측의 전송 패킷이 목적지 노드나 라우터에 도착했는지 확인하는데 사용한다.
- 라우터가 송신측 노드에 적합하지 않은 경로로 설정되어 있을 경우 그 노드에 대한 최적화된 경로를 다시 지정해주는 ICMP Redirect 메시지를 보낸다.
ICMP Time Exeeded
- 패킷이 네트워크 사이에서 무한정 돌아가지 않도록 하기 위해 각 라우터들이 패킷을 처리할때마다 TTL(Time To Live)을 감소시키다 그 값이 '0'이 되면 패킷을 패키하기위해 송신측 라우터에 ICMP Time Exeeded 메시지를 되돌려보냄으로써 패킷이 폐기된 사실을 알림
ICMP Source Quench
- 송신측 큐값이 '0'으로 남아 송신 불능 상태가 되면 'ICMP Source Quench 메시지'를 송신측 노드에 보내고 송신측은 이를 보고 송신 패킷의 양을 제어
ICMP Echo Request
- 송신측의 전송 패킷이 목적지 노드나 라우터에 도착했는지 확인하는데 사용한다.
'예전것 > 네트워크 보안' 카테고리의 다른 글
네트워크 해킹과 보안: 10장 - 연습문제/심화연습문제 (0) | 2009.07.13 |
---|---|
고급 : iptable의 패킷 필터링 설정문제 (0) | 2009.05.28 |
중급: IP 정보제한을 위한 zone transfer 설정문제 (0) | 2009.05.27 |
카테고리 없음2009. 7. 2. 22:30
예전것/프로그래밍2009. 6. 25. 21:54
10 10
20 20
30 30
위의 코드에서 *array[3] 은 분명 3개의 주소를 저장하는 공간이다.
arr1, arr2, arr3의 주소를 저장하였다.
그런데 array[0][0] array[0][1] 이건뭔가?
뒤로 돌아가서
void main()
{
char carr[3] = { 'A', 'B', 'C'};
char *cp = carr;
printf("%c %c %c", cp[0], cp[1], cp[2]);
}
위의 코드에서 cp[0]..이런식으로 접근이 가능하다는것을 배웠었다.
따라서 array[0] <= 이것자체는 arr1의 주소를 담고있다. array[0][0] 하면 0번째 인덱스의 값을 참조
그값은 바로 10이다.
20 20
30 30
위의 코드에서 *array[3] 은 분명 3개의 주소를 저장하는 공간이다.
arr1, arr2, arr3의 주소를 저장하였다.
그런데 array[0][0] array[0][1] 이건뭔가?
뒤로 돌아가서
void main()
{
char carr[3] = { 'A', 'B', 'C'};
char *cp = carr;
printf("%c %c %c", cp[0], cp[1], cp[2]);
}
위의 코드에서 cp[0]..이런식으로 접근이 가능하다는것을 배웠었다.
따라서 array[0] <= 이것자체는 arr1의 주소를 담고있다. array[0][0] 하면 0번째 인덱스의 값을 참조
그값은 바로 10이다.
'예전것 > 프로그래밍' 카테고리의 다른 글
#pragma once (0) | 2009.09.12 |
---|---|
매개 변수 2을(를) 'const char [29]'에서 'LPCWSTR'(으)로 변환할 수 없습니다. (0) | 2009.09.11 |
포인터 세번째, 여러가지 포인터 비교 (0) | 2009.06.25 |
포인터와 함수. (0) | 2009.06.23 |
C 포인터 와 scanf buf에 대해 (0) | 2009.06.23 |
예전것/프로그래밍2009. 6. 25. 18:56
1. int *np
- int형 포인터 변수로 4byte이고 int형 주소를 저장.
2. int **npp
- 2차원포인터 변수로 4byte이고 1차원 포인터 변수의 주소를 저장
3. int arr[3]
- int형 배열로 int 형 메모리 3개를 갖는 12 byte 메모리이다.
4. int arr[2][3]
- 2차원 배열
5. int *arr[3]
- int형 주소를 3개까지 저장하는 배열로 각 배열요소(arr[0] , arr[1] arr[2]) 가 int형 주소를 저장.
6. int (*arr)[3]
- arr은 포인터 변수로 4byte이며 2차원 배열과 같은 열의 개수가 [3]인 int형 배열의 시작주소를 저장하기 위해 사용된다. 포인터 변수이므로 4byte이다.
사용 예)
#include < stdio.h >
void main()
{
int arr2[2][3] = {{10,20,30}, {100,200,300}};
int (*arr)[3];
arr = arr2;
}
arr[0][0] ~ arr[1][2] 로 값 접근이 가능하다.
7. int (*arr)[2][3]
- arr은 3차원 배열의 주소를 저장하기 위한 포인터 변수로 행과 열의 개수가 [2][3]인 int형 3차원 배열의 주소를 저장한다. 포인터 변수이므로 4byte
사용 예)
#include<stdio.h>
void main()
{
int arr3[2][2][3]={{{10,20,30,{40,50,60}},{{70,80,90},{100,110,120}}};
int (*arr)[2][3];
arr = arr3;
}
arr[0][0][0] ~ arr[1][1][2]로 접근이 가능하다
8. int (*arr[2])[3]
- 같은 변수를 배열로 2개 선언한 것이다. 배열요수 (arr[0], arr[1])은 열의개수가 [3]인 int형 2차원 배열의 시작 주소등을 저장한다.
int iarr1[2][3] = {{21,22,23}, {24,25,26}};
int iarr2[3][3] = {{31,32,33}, {34,35,36}, {37,38,39}};
arr[0] = iarr1;
arr[1] = iarr2;
이렇게 해서
arr1[0][0][0] ~ arr[0][1][2] 까지 iarr1이되고
arr[1][0][0] ~ arr[1][2][2] 까지 iarr2가된다..
9. int *(*arr)[3] - 2차원 배열의 주소를 저장하는 포인터
int n1 = 10, n2=20,n3=30,n4=40,n5=50,n6=60,n7=70,n8=80,n9=90;
int *iarr1[2][3] = {{&n1,&n2,&n3}, ,{&n4,&n5,&n6};
int *iarr2[3][3] = {{&n1,&n2,&n3}, {&n4,&n5,&n6}, {&n7,&n8,&n9}};
int *(*arr)[3];
arr = iarr1; //여기서는 arr이 iarr1의 값에 *arr[0][0] ~ *arr[1][2]이렇게 접근가능..
arr = iarr2; //여기서는 arr이 iarr1의 값에 *arr[0][0] ~ *arr[2][2]이렇게 접근가능.. 배열은 주소를 저장하고있다.
10. int *func(); - int의 주소를 반환한다는 뜻..
#include<stdio.h>
int n =20;
int* func()
{
return &n;
}
void main()
{
int *np;
np = func();
printf("%d %d\n", n, *np);
}
11. int (*func)()
#include<stdio.h>
int function1()
{
puts("함수 1입니다.");
return 1;
}
int function2()
{
puts("함수 2입니다.");
return 2;
}
void main()
{
int (*func)();
func = function1;
printf("%d\n", func());
func = function 2;
printf("%d\n", func());
}
func는 포인터 변수로 4byte이며 함수의 주소를 저장한다.
12. int (*func[2])()
- 함수의 주소를 저장하는 배열로 크기가 2라서 8byte(정수형)이며, 각배열의 요소 func[0] func[1]는 함수의 주소를 저장한다.
#include<stdio.h>
int function1()
{
puts("함수 1입니다.");
return 1;
}
int function2()
{
puts("함수 2입니다.");
return 2;
}
void main()
{
int (*func[2])();
func[0] = function;
printf("%d\n",func[0]);
func[1] = function;
printf("%d\n", func[1]);
}
}
void main()
{
int *np;
np = func();
printf("%d %d\n", n, *np);
}
11. int (*func)()
#include<stdio.h>
int function1()
{
puts("함수 1입니다.");
return 1;
}
int function2()
{
puts("함수 2입니다.");
return 2;
}
void main()
{
int (*func)();
func = function1;
printf("%d\n", func());
func = function 2;
printf("%d\n", func());
}
func는 포인터 변수로 4byte이며 함수의 주소를 저장한다.
12. int (*func[2])()
- 함수의 주소를 저장하는 배열로 크기가 2라서 8byte(정수형)이며, 각배열의 요소 func[0] func[1]는 함수의 주소를 저장한다.
#include<stdio.h>
int function1()
{
puts("함수 1입니다.");
return 1;
}
int function2()
{
puts("함수 2입니다.");
return 2;
}
void main()
{
int (*func[2])();
func[0] = function;
printf("%d\n",func[0]);
func[1] = function;
printf("%d\n", func[1]);
}
'예전것 > 프로그래밍' 카테고리의 다른 글
매개 변수 2을(를) 'const char [29]'에서 'LPCWSTR'(으)로 변환할 수 없습니다. (0) | 2009.09.11 |
---|---|
배열과 포인터에 관한문제 (0) | 2009.06.25 |
포인터와 함수. (0) | 2009.06.23 |
C 포인터 와 scanf buf에 대해 (0) | 2009.06.23 |
C포인터와 little, big endian (0) | 2009.06.19 |
예전것/프로그래밍2009. 6. 23. 09:35
출력하고자 하는것
함수 호출 : 1
함수 호출 : 2
함수 호출 : 3
#include<stdio.h>
char* getstr();
void main()
{
puts( getstr());
puts( getstr());
puts( getstr());
}
char* getstr()
{
static int n = 1;
char *x = "" ;
printf("함수 호출 : %d", n++);
return x;
}
getstr함수에서 정적 변수를 선언해서 호출 할때마다 n이 증가하도록 함.
헷갈렸던것
char *x = ''; 이것은 에러가 난다. ''은 빈문자 '상수' 이기때문이다. 주소를 가리켜야한다. 그러기위해선 "" 를 써서 빈문자를 나타내는 주소를 가리키게한다.
char x = ""; (char x = '';은 상수이기 때문에 return 상수; 하는 꼴이다.)
하고
return &x 로 바꾸면 어떤 문제가 생길까?
-일단 char x= ""; 이렇게 선언한다는것 자체가 문제이다. 상수형 변수에 주소를 넣겠다는 생각인가.
이때 &x는 뭐 그냥 주소값인데 아무것도 의미하지않는다.
getstr함수에서 문자자체를 넘겨주는 방법을 생각할 수있겠다(printf없이..) 스트링함수의 append를 쓰면 될거같다...
'예전것 > 프로그래밍' 카테고리의 다른 글
매개 변수 2을(를) 'const char [29]'에서 'LPCWSTR'(으)로 변환할 수 없습니다. (0) | 2009.09.11 |
---|---|
배열과 포인터에 관한문제 (0) | 2009.06.25 |
포인터 세번째, 여러가지 포인터 비교 (0) | 2009.06.25 |
C 포인터 와 scanf buf에 대해 (0) | 2009.06.23 |
C포인터와 little, big endian (0) | 2009.06.19 |
예전것/프로그래밍2009. 6. 23. 00:22
#include<stdio.h>
int main()
{
char *str;
scanf("%s", &str);
printf("%s\n", &str);
}
위 프로그램을 실행 했을때 돌아간다.
str이 포인터 변수이지만 scanf에서 &str로 그 변수 안에 값을 써버린다.
그래서 printf해도 값이 나오는것이다. 물론 abc같은 짧은 문자를 쓰면 오류가 안나는데 adlkfasjd;lkfjasd같이 길게 쓰면 오류난다. (동적이 아니다. 이건 정적이라고볼수 있겠다.)
이경우에 우리는 *str을 이용하기 위해서 malloc 이라는 함수를 사용한다. char *str이 아무것도 가르키고 있지 않기 때문에 현재는 쓰레기 값이다. 그래서 malloc함수를 이용해 어느 한곳을 지정해준다.
#include
int main()
{
char *p;
p = (char*)malloc(20);
scanf("%s", p);
printf("%s", p);
free(p);
return 0;
}
#include
int main()
{
char p[20];
scanf("%s", p);
printf("%s", p);
return 0;
}
포인터 변수는 말그대로 어떤 주소값을 가리키고 있다.
그리고, 이 주소값이 가리키는 메모리영역에는 scanf로 받아들인 데이터를
저장하기 위한 어느정도의 공간이 할당되어야한다.
메모리를 잡아주어야한다.
int main()
{
char *str;
scanf("%s", &str);
printf("%s\n", &str);
}
위 프로그램을 실행 했을때 돌아간다.
str이 포인터 변수이지만 scanf에서 &str로 그 변수 안에 값을 써버린다.
그래서 printf해도 값이 나오는것이다. 물론 abc같은 짧은 문자를 쓰면 오류가 안나는데 adlkfasjd;lkfjasd같이 길게 쓰면 오류난다. (동적이 아니다. 이건 정적이라고볼수 있겠다.)
이경우에 우리는 *str을 이용하기 위해서 malloc 이라는 함수를 사용한다. char *str이 아무것도 가르키고 있지 않기 때문에 현재는 쓰레기 값이다. 그래서 malloc함수를 이용해 어느 한곳을 지정해준다.
#include
int main()
{
char *p;
p = (char*)malloc(20);
scanf("%s", p);
printf("%s", p);
free(p);
return 0;
}
#include
int main()
{
char p[20];
scanf("%s", p);
printf("%s", p);
return 0;
}
포인터 변수는 말그대로 어떤 주소값을 가리키고 있다.
그리고, 이 주소값이 가리키는 메모리영역에는 scanf로 받아들인 데이터를
저장하기 위한 어느정도의 공간이 할당되어야한다.
메모리를 잡아주어야한다.
'예전것 > 프로그래밍' 카테고리의 다른 글
매개 변수 2을(를) 'const char [29]'에서 'LPCWSTR'(으)로 변환할 수 없습니다. (0) | 2009.09.11 |
---|---|
배열과 포인터에 관한문제 (0) | 2009.06.25 |
포인터 세번째, 여러가지 포인터 비교 (0) | 2009.06.25 |
포인터와 함수. (0) | 2009.06.23 |
C포인터와 little, big endian (0) | 2009.06.19 |