IPC 통신 예제인 minitalk의 수행 기록이다.

Minitalk 프로젝트란?

Minitalk 번역본

Minitalk은 서버와 클라이언트를 만들어서 통신하는 IPC 통신의 예제이다.

구현 사항은 아래와 같다.

  1. 서버와 클라이언트가 통신을 해야 하는데, 이 통신 과정에서 sigusr1과 sigusr2, 2개의 시그널만을 사용해야 한다.

    그렇기 때문에 sigusr1을 0, sigusr2를 1로 간주하여 문자열의 문자 하나하나를 2진수로 만들어 보낸다. —> 16진수를 2진수로 만들고, 이 값에 따라 시그널(sigusr1, sigusr2)을 보내야 한다.

  2. 이 프로젝트에서는 클라이언트에서 서버로 문장을 보낸 뒤 서버에서도 이를 출력해야 한다. —> 2진수를 16진수로 변환해 변환한 값을 출력한다.

  3. 서버에서 제대로 수신했는지 확인하는 checker유니코드도 송,수신할 수 있게 하는 것이 보너스이다.

    3.1. 시그널을 보내기 위해서는 시그널을 보낼 프로세스의 식별자인 pid를 알아야 한다. 클라이언트에서 서버로 시그널을 보내기 위해 서버가 실행되면 그 서버 프로세스의 pid를 출력하고, 이 출력된 pid를 클라이언트가 실행될 때 main의 인자값(argv[1])로 받아 클라이언트에서는 서버로 pid를 보낼 수 있다.

    그러나 서버에서 클라이언트로 수신이 제대로 되었다는 시그널을 보내기 위해서는 클라이언트의 pid를 알아야 한다. 이를 위해 시그널을 보낼 수 있는 signal() 함수 대신 sigaction()의 siginfo 구조체를 사용한다.

시그널 처리 방법 - 과제수행 전


시그널이란?

시그널 처리 방법

sigaction과 siginfo 구조체

진수 변환


10진수를 2진수로 변환하기

2진수를 10진수로 변환하기

client와 server (실제 코드 구현)


client에서 시그널 등록 및 이용

server에서 시그널 등록 및 이용

수신확인시스템(checker) 구현

유니코드 전송

평가 결과