IPC 통신 예제인 minitalk의 수행 기록이다.
Minitalk은 서버와 클라이언트를 만들어서 통신하는 IPC 통신의 예제이다.
구현 사항은 아래와 같다.
서버와 클라이언트가 통신을 해야 하는데, 이 통신 과정에서 sigusr1과 sigusr2, 2개의 시그널만을 사용해야 한다.
그렇기 때문에 sigusr1을 0, sigusr2를 1로 간주하여 문자열의 문자 하나하나를 2진수로 만들어 보낸다. —> 16진수를 2진수로 만들고, 이 값에 따라 시그널(sigusr1, sigusr2)을 보내야 한다.
이 프로젝트에서는 클라이언트에서 서버로 문장을 보낸 뒤 서버에서도 이를 출력해야 한다. —> 2진수를 16진수로 변환해 변환한 값을 출력한다.
서버에서 제대로 수신했는지 확인하는 checker와 유니코드도 송,수신할 수 있게 하는 것이 보너스이다.
3.1. 시그널을 보내기 위해서는 시그널을 보낼 프로세스의 식별자인 pid를 알아야 한다. 클라이언트에서 서버로 시그널을 보내기 위해 서버가 실행되면 그 서버 프로세스의 pid를 출력하고, 이 출력된 pid를 클라이언트가 실행될 때 main의 인자값(argv[1])로 받아 클라이언트에서는 서버로 pid를 보낼 수 있다.
그러나 서버에서 클라이언트로 수신이 제대로 되었다는 시그널을 보내기 위해서는 클라이언트의 pid를 알아야 한다. 이를 위해 시그널을 보낼 수 있는 signal() 함수 대신 sigaction()의 siginfo 구조체를 사용한다.