10진수를 2진수로 변환해 출력하는 방법은 다음과 같다.

7번부터 0번까지 >>연산을 한 후 1(00000001)과 &연산을 하면 맨 마지막 숫자만 살아남는다.

제일 처음 message를 7번 >>연산하면 10000000 혹은 00000000이 되고, 이를 00000001과 &연산하면 1 또는 0만 살아남는다. 이를 7번 >> 연산 ~ 0번 >>연산 이렇게 반복하면 message가 왼쪽부터 차례대로 2진수로 변환된다.

void decimalToBin(char message)
{
    int result;
    int i;

		result = 0;
    i = 7;
    while (i >= 0)//8bit까지 표현
    {
        result = message >> i & 1;//>>연산 후 &연산하기.
        printf("%d", result);
        i--;
    }
}

우리는 여기서 10진수를 2진수로 바꾸어 출력하는 것 대신 2진수로 바꾸었을 때의 값이 0이면 sigusr1 시그널을, 값이 1이면 sigusr2 시그널을 서버의 pid로 보낼 것이다.

단, kill로 시그널을 보내 주었을 때의 리턴값이 -1이면 시그널을 보내는 데에 실패한 것이므로 예외처리를 해 주어야 한다.

또 보내는 데에 시간이 걸리므로 usleep으로 일정 ms동안 대기한다.

printf문 대신 kill을 쓴 함수는 아래와 같다.

void decimalToBin(int pid, char message)
{
    int result;
    int i;

	result = 0;
    i = 7;
    while (i >= 0)//8bit까지 표현
    {
        result = message >> i & 1;//>>연산 후 &연산하기.
        if (result == 0)
        {
            if (kill(pid, SIGUSR1) == -1)
            {
                printf("failed to send message\\n");
                exit(0);
            }
        }
        else if (result == 1)
        {
            if (kill(pid, SIGUSR2) == -1)//kill을 했을 때 -1이면 에러
            {
                printf("failed to send message\\n");
                exit(0);
            }
        }
        i--;
        usleep(100);
    }
}