\documentclass{howto}

\usepackage[hangul,nonfrench]{dhucs}
\usepackage{dhucs-ucshyper}
\hypersetup{%
  colorlinks=true,
  plainpages=false,
}

\title{ROVM Interface 문서}
\author{정 원교}
\authoraddress{
  \strong{지구 남쪽에서}\\
  이메일 : \email{weongyo@gmail.org}
}
\date{2006.2.18}

\begin{document}
\maketitle

\begin{abstract}
  \noindent
  이 문서는 ROVM Interface 에 대한 자세한 설명을 하고 있는
  문서입니다.
\end{abstract}

\tableofcontents

\section{소개}
\label{sec:introduction}

ROVM Interface 는 ROVM Client 의 C 버전이라고 생각하면 쉽게 이해하실
수 있을 것 같습니다.  하지만 ROVM Client 와 다른 점은
\begin{itemize}
\item 이 패키지는 \textbf{디버깅}을 위한 것이 아닙니다.  이를 통해서
  디버깅을 하지 않으며, 디버깅을 원한다면 ROVM Client 를 사용하길 권합니다
\item 이 패키지는 실제 ROVM Server 와 연동하는 프로그램을 작성할
  개발자를 위한 패키지입니다.
\end{itemize}

전체적인 ROVM Interface 의 윤곽을 파악할 수 있는 예제 코드로 소개를
한다면 아래와 같은 코드를 소개할 수 있을 듯 합니다.

\begin{verbatim}
#include "rovm.h"

int
main (void)
{
  char *msg = "Hello World!";
  rovm_t *r;
  rovmret_t *ret;

  r = rovm_req ("192.168.58.129", 4390);
  if (!r)
    {
      fprintf (stderr, "Connection problem?\n");
      return -1;
    }

  r->ops.spush (r, msg, strlen (msg));
  r->ops.call (r, "split", "(T)[");

  ret = r->send (r);
  if (ret)
    r->printreturn (r, ret);
  else
    r->printerror (r);

  rovm_reqend (r);

  return 0;
}
\end{verbatim}

위 코드는 192.168.58.129 서버의 포트 4390 에 ROVM Server 가 LISTENING
을 하고 있는 상황에서 문자열 ``Hello World!''을 split () 을 하는
예제입니다.  이에 대한 실행결과는 아래와 같습니다.  

\begin{verbatim}
(arrayref [
    (string "Hello")
    (string "World!")
])
\end{verbatim}

위의 메세지를 해석하면 실행 결과로써 배열이 왔으며, 첫번째와 두번째
인자가 문자열 임을 암시합니다.

\section{전체적인 구조}
\label{sec:structure}

`소개' 절에서 언급한 예에서 볼 수 있듯이, 현재 ROVM Interface 의
전체적인 구조는 매우 단순한 구조를 가지고 있습니다.

즉 \texttt{rovm_req ()} 함수로 시작해서 \texttt{rovm_reqend ()} 함수로 끝납니다.  중간의
모든 과정은 \texttt{rovm_req ()} 함수가 반환한 포인터 \texttt{rovm_t *r} 을
이용하여 이루어지게 됩니다.

이 r 포인터 내부에 선언되어 있는 함수들에는 어떤 것들이 있는지는
아래에서 살펴볼 것입니다.

\subsection{메모리의 관리}
\label{sec:managememory}

현재 ROVM Interface 는 APR (Apache Portable Runtime) 을 기존
라이브러리로 사용하고 있습니다.

메모리의 관리는 바로 APR 에서 제공되는 memory pool 을 이용하여
관리되게 됩니다.

\texttt{rovm_req ()} 함수 실행시 이 메모리 풀이 활당되며, \texttt{rovm_reqend ()} 함수가
실행되면 이 메모리 풀이 완전히 제거되게 됩니다.

모든 함수의 메모리 할당이 이 메모리 풀을 통해 이루어지기 때문에
\texttt{rovm_reqend ()} 함수가 호출된 이후에 메모리 풀 내부에 할당된 메모리를
사용하지 않도록 주의가 필요합니다.

\end{document}

%%% Local Variables: 
%%% mode: latex
%%% TeX-master: t
%%% End: 
