SIGUSR1과 SIGUSR2 두 가지 시그널만을 사용하여 문자열을 전송하는 클라이언트-서버 구조 통신 프로그램
◦ write
◦ ft_printf (직접 구현한 경우)
◦ signal
◦ sigemptyset
◦ sigaddset
◦ sigaction
◦ kill
◦ getpid
◦ malloc
◦ free
◦ pause
◦ sleep
◦ usleep
◦ exit
void send_char(int pid, int c)
{
int i;
i = 8;
while (i--)
{
if (c % 2)
kill(pid, SIGUSR1); // 1을 전송
else
kill(pid, SIGUSR2); // 0을 전송
c /= 2;
usleep(50);
}
}
void print_sig(int signum)
{
static char temp;
static int bit;
if (signum == SIGUSR1)
temp |= (1 << bit);
bit++;
if (bit == 8)
{
write(1, &temp, 1);
bit = 0;
temp = 0;
}
}
UNIX 시스템은 동일한 종류의 시그널이 이미 대기 중일 때 추가 시그널을 큐에 넣지 않음
이를 방지하기 위해 usleep()을 사용하여 시그널 간 적절한 간격을 둠
유효하지 않은 PID 값에 대한 검증을 수행
void print_sig(int signum)
{
static char temp;
static int bit;
if (signum == SIGUSR1)
temp |= (1 << bit);
bit++;
if (bit == 8)
{
write(1, &temp, 1);
bit = 0;
temp = 0;
}
}
배운점 !
운영체제와 직접 상호작용하는 저수준 프로그래밍 경험
UNIX 시그널의 동작 방식
비동기 통신의 특성과 처리 방법
시스템 콜의 적절한 활용 방법