서버와 클라이언트를 각각 만들었다. 그리고 각각의 프로그램은 fork함수를 사용해서 부모 프로세스는 입력을 받아서 전송을 하는 역활이고 자식 프로세서는 받기민 할수있는 프로세스이다. 그리고 exit를 입력 하면 자식 통신은 종료가 된다. 간단한 프로그램이다.

그리고 readline함수는 키보드로 부터 값을 입력 받는 함수로서 컴파일 시에 목적 코드를 같이 link한다.

readline.c 파일


int readline(int fd,char *ptr,int maxlen)
{
    //.....
    for(n=1;n<maxlen;n++)
    {
        if((rc=read(fd,&c,1))==1)
        {
            *ptr++ = c;                  // 각각 ptr의 포인터에다 값을 저장 받는다.
            if( c=='\n') break;    // 엔터가 들어오면 입력을 중지 받는다.
        }
        else if(rc==0)    // 입력이 없으면 끝내는 쪽이다.
        {
            if(n==1) return 0;
            else break;
        }
    }
    *ptr=0;
    return n;                                // 몇 라인인지 리턴한다.
}
 




서버와 클라이언트 프로그램의 자식 프로세서를 이용한 메세지 주고 받기 처리

if((pid=fork())>0)    // 부모 프로세서로 여기서는 키를 입력 받는다.
    {
        while(readline(0,sendline,MAXLINE)!=0)
        {
            size=strlen(sendline);                                  // 사이즈를 받고
            if(write(client_fd,sendline,size)!=size)    // 클라이언트에게 명령을 전달한다.
            {
                printf("Server:fail in writing\n");
            }
            if(strncmp(sendline,escapechar,4)==0) // 만약 종료문자와같다면 종료한다.
            {
                kill(pid,SIGQUIT);                            // 자식 프로세서를 종료 시킴
                break;
            }
        }
    }
    else if(pid==0)   // 자식 프로세서로 여긴 메세지를 받는다.
    {
        while(1)            // 항상 대기 하고 있는다.
        {
            if((size=read(client_fd,rbuf,MAXLINE))>0)    // 만약 받은 메세지가 있다면
            {
                rbuf[size] = '\0';
                if(strncmp(rbuf,escapechar,4)==0)            // 종료문자가 들어오면
                {
                    kill(getppid(),SIGQUIT);            // 부모를 종료 시키고
                    break;                // 자식도 종료 시킨다.
                }
                printf(" %s",rbuf);                               // 내용을 출력하고
            }
        }
    }
 




div>