2011. 8. 12. 06:54

01. 표준 입출력 함수를 사용했을 때 얻게 되는 장점 두 가지는 무엇인가? 그리고 그 두가지 장점을 얻게 되늰 이유는 또 무엇인가?

02. 표준 출력함수를 이용해서 데이터를 전송하는 경우에는 다음과 같이 생각하는 것은 옳지 않다.
"fputs 함수호출을 통해서 데이터를 전송하면, 함수가 호출되자 마자 데이터의 전송이 시작될 거야."
그렇다면 위와 같은 생각이 옳지 않은 이유는 무엇이고, 위와 같이 생각하기 위해서는 추가로 어떠한 과정이 필요한지 설명해 보자.
Posted by Triany
2011. 8. 12. 05:22

01. TTL이 의미하는 바는 무엇인가? 그리고 TTL의 값이 크게 설정되는 것과 작게 설정 되는 것에 따른 차이와 문제점을 라우팅의 관점에서 설명해보자.
 - 작게 설정 : 보내야 하는 위치까지 데이터가 갈 수 없음
 - 크게 설정 : 돌아다니는 패킷이 너무 많다.
  ...(내생각;;()



02. 멀티캐스트와 브로드캐스트의 공통점은 무엇이고 또 차이점은 무엇인가? 데이터의 송수신 관점에서 설명해 보자.
공통점 : 한 번에 여러 호스트에 데이터를 전송
차이점 : 전송이 이루어 지는 범위
   - 멀티캐스트 : 서로 다른 네트워크 상에 연결되어있는 호스트라 할 지라도 멀티캐스트그룹에 가입되어 있으면 데이터 수신 가능
   - 브로드 캐스트 : 동일한 네트웨크로 연결되어 있는 호스트로 데이터의 연결 대상 제한

03. 다음중 ....

04. 멀티캐스트는 트래픽 측면에서도 긍정적이다!! 그렇다면 어떠한 이유로, 어떻게 긍정적인지 TCP의 데이터 송수신 방식과 비교해서 설명해 보자.
  -1000개의 호스트에게 파일을 전송하기 위해 딱 한번만 멀티캐스트 방식으로 파일을 전송해도 가능하다. 호스트에서 하나의 패킷만 보내도, 라우터 측에서 1000개의 호스트에게 파일을 복사해서 전송.


05. 멀티캐스트 방식의 데이터 송수신을 위해서 MBone 이라는 가상의 네트워크가 구성되어 있어야 한다. 즉, MBone은 멀티캐스트를 위한 네트워크이다. 그런데 이러한 MBone을 가리켜 가상 네트워크라 한다. 그렇다면 여기서 말하는 가상네트워크가 무엇을 뜻하는지 설명해보자.
 - 가상네트워크 : 인터넷 상에서 별도의 프로토콜을 기반으로 동작하는 소프트웨어적인 개념의 네트워크.
                         멀티캐스트에 필요한 네트워크 구조를 인터넷 망을 바탕으로 소프트웨어적으로 구현해 놓은 가상의 네트워크
Posted by Triany
2011. 8. 10. 12:11

리눅스 프로그래밍(TCP/IP 소켓 프로그래밍)을 하는 도중에, 빈번한 세그먼테이션 오류로 고생하던중..ㅠㅠ
원인을 찾았다...

원인은 대부분.;; 나의 오타..;;
음... 그러니까 - visual스튜디오에서는, c프로그래밍중 대부분의 오류를 잡아주지만...
gcc 상에서는.. 그냥 컴파일 - > 실행 ..ㅠㅠ 환경이기 때문에,(컴파일에서 오류를 못잡아주고.. 실행시.. dump dump..)
오타가 나는 경우.. 알아채기가 힘들다...ㅠㅠ

음... 이번 경우에서는
긴 프로그래밍에서

printf("Result : %s \n", sum);  .... 이것 때문..;;
printf("Result: %d\n", sum); .. 이렇게 했어야 하는데.....


많은 지식인 님들의 조언에 의하면,
* 세그먼 테이션 오류는
  - 포인터를 잘 못 사용할 시 발생
  - 포인터, 또는 배열의 메모리를 잘 못 사용할 경우
  ( 포인터로 지정해 놓고, 초기화도, 메모리 할당도 안해준 경우)
등등의 경우로 볼 수 있었다. - -
물론,
리눅스가 아닌 솔라리스 서버를 사용할 경우에,, 함수가 호환이 안되서(???) 메모리 덤프가 일어나는 경우도 있었음 -


여하튼.. 중요한건... 오타의 최소화!
Posted by Triany
2011. 8. 8. 17:28
▣ JSON 파서란?
  - XML보다 좀 더 간략화된 정보 전달 방법 중 하나 =>가볍고! 구현이 편함!(서버와의 연동은 JSON~!)
  - JSON(Java Script Object Notation)은 웹에서 정보를 주고 받는 경량화된 방법이다.
  - JSON은 자바 스크립트에서 주로 사용되는 방법이지만 다른 언어에서도 수치, 논리, 문자열, 객체, 배열 등의 타입이 약간씩 다른 형태로 존재하므로 대부분의 언어에 활용할 수 있다.

▣ JSON의 특징 및 장점
  - 데이터 파일은 단순한 유니코드 텍스트 파일로 사람이 읽을 수 있고 직접 편집도 가능하다.
  - 단순한 텍스트 파일이므로 네트워크로 전송하기 편리하며 텍스트를 읽고 쓸 수 있는 모든 언어나 플랫폼에서 사용이 가능하다.
  - 헤더, 네임스페이스 따위의 형식적인 정보나 구두점들이 없고 정보 자체만을 가지므로 XML보다 일반적으로 길이가 짧다.
  - 대부분 언어에 JSON 파서가 라이브러리 형태로 제공되므로 직접 문자열을 파싱할 필요가 없다.
  - RFC 4627로 포맷이 규격화되어 있어 나름대로 표준이 정립되어 있다.

▣ JSON에 저장되는 정보의 형태
  - 배열 : 대괄호 안에 값을 콤마로 구분하여 나열하며, 대괄호 안에 나오는 순서대로 배열 요소의 순서가 매겨진다.[1, 2, 3]
  - 객체 : 중괄호 안에 있는 이름 : 값의 형태로 멤버 하나를 표현하고 각 멤버는 콤마로 구분한다.
순서가 아닌 이름으로 읽기 때문에 멤버의 순서는 의미가 없다. { "name" : 29 }
  - 단순 값 : 수치, 문자열, 논리형, null 등의 4가지 타입을 지원하며, 날짜나 시간, 화폐 등의 복잡한 정보는 따로 지원하지 않으므로 문자열 형태로 표현해야 한다.

▣ JSONArray 클래스는 JSON 파일에서 배열을 읽어들인다.

▣ 생성자로 JSON 문자열을 전달하면 이 문자열을 파싱하여 내부 메모리에 배열 형태로 저장할 것이다.
   ( 내부 메모리에 배열 형태로 저장하기에, 연속적인 메모리 공간에 존재하기에 빠르다. )



[사용방법]

▩ 배열에 저장된 값을 읽을 때는 다음 메서드를 호출한다. -> 인수가 다 int 기반에 index
  - Object get (int index)
  - int getInt (int index)
  - String getString (int index)
  - boolean getBoolean(int index)
  - JSONArray getJSONArray (int index)
  - JSONObject getJSONObject (int index)

▩ JSONObject 클래스는 JSON 파일에서 객체를 읽어들이며 멤버들을 읽을 때는 다음 메서드를 호출한다.
  - Object get (String key)
  - int getInet(String key)
  - String getString (String key)
  - boolean getBoolean(String key)
  - JSONArray getJSONArray (String key)
  - JSONObject getJSONObject (String key)

▩ JSON 파일에 저장되는 정보가 주로 배열과 객체이므로 JSONArray, JSONObject 두 클래스와 그 메서드들로 모든 정보를 다 추출할 수 있다.



☆ JSON 파서 (실습 예제 1) .. String 값 파싱..

 


main_1.xml



JSONArrayTest.java




★ JSON파서 (실습예제 2)

 



main_2.xml



JSONObjectTest.java




실습 예제 :




출처 : 한빛미디어_ 안드로이드 책자
Posted by Triany
2011. 8. 6. 14:07
02. readv& writev 함수를 이용해서 데이터를 송수신 할 경우 어떠한 이점이 있는지 함수 호출의 횟수와 입출력 버퍼의 관점에서 각각 설명해 보자.
   - 데이터 송수신의 효율성을 향상
   - writev 함수를 사용하면 여러 버퍼에 나뉘어 저장되어 있는 데이터를 한 번에 전송할 수 있고,
   - 또 readv 함수를 사용하면 데이터를 여러 버퍼에 나눠서 수실할 수 있다.


03. recv 함수호출을 통해서 입력 버퍼의 데이터 존재 유무를 확인하고자 할 때(확인 후 바로 반환하고자 할 때) recv함수의 마지막 전달인자인 데이터 전송의 옵션을 어떻게 구성해야 하는가? 그리고 각각의 옵션이 의미하는 바는 무엇인지도 설명해 보자.
while(1)
{
    str_len=recv(recv_sock, buf, sizeof(buf)-1, MSG_PEEK|MSG_DOWNWAIT);
    if ( str_len > 0 )
       break;
}


04. 리눅스에서는 MSB_OOB 데이터......
Posted by Triany
2011. 8. 6. 13:38

01. 멀티플렉싱 기술에 대한 일반적인 의미를 말하고, IO멀티플렉싱 한다는 것이 무엇을 의미하는지 설명해 보자.
*멀티 플렉싱
  - 하나의 통신 채널을 통해서 둘 이상의 데이터 시그널을 전송하는데 사용되는 기술.
  - 물리적 장치의 효율성을 높이기 위해서 최소한의 물리적인 요소만을 사용해서 최대한의 데이터를 전달하기 위해 사용되는 기술.
  =>


02. 멀티 프로세스 기반의 동시 접속 서버의 단점은 무엇이며, 이를 멀티 플렉싱 서버에서 어떻게 보완하는지 설명해 보자.
client의 수만큼 child 프로세스를 생성
=> 멀티 플렉싱 기술을 적용하면, 프로세스의 수가 줄어든다. 즉, 접속해 있는 클라이언트의 수에 상관없이 서비스를 제공하는 프로세스의 수는 딱 하나..


03. 멀... (생략)

04. select 함수의 관찰대상에 서버 소켓(리스닝 소켓)도 포함시켜야 한다. 그렇다면 어떠한 부류에 포함을 시켜야 하며, 그 부류에 포함시키는 이유도 설명해 보자.
- 연결요청이 있었다는 뜻...


05. select 함수의 호출에 사용되는 자료형 fd_set 의 정의형태는 윈도우와 리눅스에서 차이를 보인다. 그렇다면 어떻게 차이가 나는지 설명하고, 차이가 날 수 밖에 없는 이유에 대해서도 설명해 보자.
Posted by Triany
2011. 7. 31. 01:22

Dijkstra's Algorithm 필기시험에도 한번씩 등장하는 주제죠..

아래의 강의는 Dijkstra;s Algorithm의 기초를 잡는데 아주 좋은 강의인거 같습니다

 

http://www.youtube.com/watch?v=8Ls1RqHCOPw&feature=related

(유튜브를 퍼오는 방법을 몰라서...-_ㅜ)

 

연관 동영상에 Graph traversal도 있는데 역시 DFS, BFS에 대해서 잘 설명해줍니다 ㅎ

Posted by Triany
2011. 7. 30. 22:24

1. 황토 _ 조정래

2. 무슨 일이 일어났는지는 아무도 _ 김영하

3. 오빠가 돌아왔다. _ 김영하

4. 나는 나를 파괴할 권리가 있다 _ 김영하

5. 샬롯 브론테의 비밀일기:제인에어의 탄생 _ James, Syrie

6. 제인에어 상, 하 _ 샬롯 브론테

7. 순이 _ 이경자

8. 로마인 이야기4 _ 율리시스 카이사르. 상

9. 꾸삐씨의 행복여행 _ Lelord, Francois.

10. 행복한 철학자 _ 우애령 글. 엄유진 그림
Posted by Triany
2011. 7. 30. 11:15
01. 프로세스에 대한 설명_ (OX 문제, 책에_)

02. fork 함수...... (OX문제, 책에_)

03. 자식 프로세스가 생성되면 부모 프로세스의 모든 것을 복사하는데, 이때 복사의 대상으로 소켓의 파일 디스크립터도 포함이 된다. 그러다면 복사한 파일 디스크립터의 정수 값은 원본 파일 디스크립터의 정수 값과 동일한지 확인하기 위한 프로그램을 작성해 보자.

04. 프로세스가 좀비가 되는 경우에 대해서 설명하고, 이를 막기 위해서 어떠한 방법을 취해야 하는지 설명해 보자.
* 자식프로세스가 종료되는 상황
  - 인자를 전달하면서 exit를 호출하는 경우
  - main 함수에서 return 문을 실행하면서 값을 반환하는 경우
* 좀비가 되는 경우 : 자식프로세스의, exit 함수로 전달되는 인자값과 main함수의 return 문에 의해 반환되는 값 모두 운영체제로 전달된다. 그리고 운영체제는 이 값이 자식 프로세스를 생성한 프로세스에게 전달될 때까지 자식프로세스를 소멸시키지 않는데, 바로 이 상황에 놓여있는 프로세스를 가리켜 "좀비 프로세스"라 한다.

아래의 함수를 사용하여, 자식프로세스의 종료됨을 알린다.(자식 프로세스의 전달 값을 요청)
방법 1 : wait 함수 사용    (블로킹 될 수 있음)
방법 2 : waitpid 함수 사용(블로킹 되지 않음)



05. SIGINT에 대한 핸들러를 등록하지 않은 상태에서 Ctrl+C키가 입력되면, 운영체제가 지정해 놓은 디폴트 이벤트 핸들러에 의해서 프로그램이 종료되어 버린다. 그러나 Ctrl+C키에 대한 핸들러를 직접 등록하면 프로그램은 종료되지 않고 프로그래머가 지정한 이벤트 핸들러가 대신 호출된다. 그렇다면 일반적인 프로그램에서 다음과 같이 동작하도록 이벤트 핸들러 등록을 위한 코드를 구성해 보자.
"Ctrl+C키가 눌리면, 정말로 프로그램을 종료할 것인지 묻고, 이에
 대한 대답으로 'Y'가 입력되면 프로그램을 종료한다."

그리고 간단히 문자열은 1초당 한번 정도 반복 출력하는 프로그램을 작성해서 위의 이벤트 핸들러 등록 코드를 적용시켜보자.
Posted by Triany
2011. 7. 29. 15:37



01. Time-wait 상태에 대해 설명(OX문제_ 책에)



02. 옵션 TCP_NODELAY는 Nagle 알고리즘과 간련이 있다. 이 옵션을 이용해서 Nagle 알고리즘을 해제할 수도 있는데, 그렇다면 어떠한 경우에 한해서 Nagle알고리즘의 해제를 고민해 볼 수 있겠는가? 이를 송수신하는 데이터의 특성과 관련해서 설명해 보자.

Nagle알고리즘을 중단해야 하는 경우
"Nagle 알고리즘의 적용여부에 따른 트래픽의 차이가 크지 않으면서도 Nagle 알고리즘을 적용하는 것보다 데이터의 전송이 빠른경우"_대용량 파일 데이터의 전송의 경우로, 파일데이터를 출력버퍼로 밀어 넣는 작업시간이 얼마 걸리지 않기에 Nagle알고리즘을 적용하지 않아도 출력버퍼를 거의 꽉 채운 상태에서 패킷을 전송하게 되는데, 이 경우 패킷의 수가 크게 증가하지도 않을 뿐더러, ACK를 기다리지 않고 연속해서 데이터를 전송하니 전송속도가 놀랍게 향상된다.
Posted by Triany