# minitalk
minitalk
overview signal함수들을 이용해서 server와 client가 통신하는 시스템을 만들어보자 requirements server가 먼저 실행되고 PID출력. client는 server's PID와 보낼 문자열을 parameters로 갖는다. parameter로 들어온 문자열을 server로 보내고 server는 이를 출력해야한다. server와 client의 통신은 unix signal로 이루어져야한다. server는 문자열 출력을 빠르게 해야한다. 1초 100글자는 굉장히 큰 시간. server는 다수의 clients에게 문자열을 연속적으로 수신할 수 있다. SIGUSR1과 SIGUSR2 두 개의 signal만 사용 가능. signal definition = software interrupt. 즉, 프로그램이 예상하지 못한 외부의 event를 다루기 위한 매커니즘. (interrupt = unexpecte
[mini_talk] mini_talk 구현
Mini_talk > 클라이언트가 서버로 문자열을 전송하면 서버에서 해당 문자열을 출력하도록 하는 프로그램을 만들어보는 프로젝트 UNIX의 signal을 활용하여 제작 구현방법 > 서버가 실행되면 서버의 pid(getpid())를 출력하고 signal(signal())함수를 사용해 시그널을 받기위해 대기(pause()) 클라이언트 실행시 서버의 pid와 보낼 메시지를 받으며 시작 클라이언트는 보낼 메시지의 문자 하나하나의 아스키코드값을 2진수로 변환 변환한 2진수값 하나하나를 kill(kill())함수를 사용해 서버로 시그널을 전송 SIGUSR1시그널은 2진수의 0, SIGUSR2시그널은 1로 간주하여 일정 시간텀을 두고 서버로 전송 서버는 수신한 시그널을 8번(1byte = 8bit)마다 끊어 2진수로 받은 뒤 10진수로 변환하여 문자의 아스키코드를 바탕으로 출력 Server > main함수 getpid
signal() 사용해 SIGUSR1 signal 주고받기
클라이언트가 서버로 문자열을 전송하면 서버에서 해당 문자열을 출력하도록 하는 프로그램을 만들어보는 프로젝트 UNIX의 signal을 활용하여 제작 서버 클라이언트 signal(int signal,void (*)(int)) > 특정한 시그널을 수신하면 정해진 함수를 실행해주는 함수 signal(SIGUSR1, sig_usr1); SIGUSR1 시그널을 수신하게되면 sig_usr1함수를 실행 kill(pid_t pid, int sig) > pid는 시그널을 받을 특정 프로세스 또는 그룹의 pid > pid > 0 pid에 대응되는 프로세스에 시그널을 보낸다. pid == 0 현재프로세스에 속한 모든 그룹의 프로세스에 시그널을 보낸다. pid == -1 1번 프로세스 (init) 를 제외한 모든 프로세스에 시그널을 보낸다. pid 어떤

[42서울] minitalk : UNIX signal
📡 UNIX signal signal은 Software interrupt로, 프로세스에 무엇인가 발생했음을 알리는 간단한 메시지를 비동기적으로 보내는 것이다. 쉽게 말하자면 특정 이벤트가 발생했을 때, 신호를 알려주는 걸 말한다. 운영체제가 개입해서 처리해줘야 하는 다양한 상황이 있기 때문에 다양한 시그널의 종류가 존재하는데, kill -l 명령어를 통해 시그널 목록을 확인할 수 있다. 시그널은 `` 헤더 파일에 정의되어있다. 시그널을 받은 프로세스는 시그널에 따라 미리 지정된 기본 동작을 수행

[42Seoul] - Minitalk (Main)
1.만들어야 하는것 Server와 Client의 프로그램을 두개 만들어 Unix Signal로 통신하게 만들기 2.Unix Signal이란? Signal이란 Software interrupt**로, process에 무엇인가 발생했음을 알리는 간단한 메시지를 ‘비동기'적으로 보내는 것이다. Signal을 받은 프로세스는 Signal에 따른 미리 지정된 기본동적을 수행할 수도 있고, 사용자가 미리 정의해 놓은 함수에 의해서 무시하거나, 특별한 처리를 할 수 있다. 예를 들어 프로세스가 진행중에 Ctrl +c 를 누른다거나, 프로세스에 kill 명령이 내려지는 것이 발생했을 때 Signal이 발생한다. 💡 **interrupt : CPU의 정상적인 프로그램 실행을 방해하는 것 그러므로 우리는 Signal을 이용하여 신호를 보내고 받도록 만들어주면 된다. 3.사용 가능한 함수 과제에서 쓸수 있는 함수들이 주어져 있었다. 아래의 함수

[42Seoul] - Minitalk (subject)
무엇을 하는 과제인가? Server와 Client 프로그램을 각각 만들어서 UNIX Signal로 통신하게 만드는 것. 기본 지시사항 여러분의 프로젝트는 Norminette 기준에 따라 작성되어야 합니다. 보너스 파일이나 함수가 있는 경우, 해당 파일/함수도 Norminette 기준을 체크하는 데에 포함해야 하며, Norminette 에러가 발생할 시에는 여러분의 프로젝트는 0점을 받게 됩니다. 정의되지 않는 동작인 경우 이외에는 여러분이 작성하신 프로그램이 예기치 않게 종료되면 안됩니다 segmentation fault, bus error, double free 등. 만약 여러분의 프로그램이 예기치 않게 종료된다면, 작동하지 않은 것으로 간주되어 평가에서 0점을 받게 됩니다. 힙에 선언한 모든 메모리 영역은 free로 처리되어야 합니다. 메모리 누수는 용납되어서는 안됩니다. 서브젝트가 요구할 시 Makefile을 제출하여야 합니다. 여러분
Unix signal을 이용해 스스로 대화 해보기.
목표 : Unix Signal USRSIG1, USRSIG2를 이용해 통신하는 클라이언트와 서버를 만든다. 송-수신 확인 사전지식 사용 가능한 함수 int kill(pid_t pid, int sig) pid가 양수이면, sig 시그널을 pid로 보냄. pid가 0이면, 현재 프로세스가 속한 프로세스 그룹의 모든 프로세스에게 sig 시그널을 보낸다. pid가 -1보다 작으면, pid 프로세스가 포함된 모든 그룹의 프로세스에세 sig 시그널을 보낸다. int sigaction(int sig, const struct sigaction restrict act, struct sigaction restrict oact) sigaction 함수를 사용하기 위해서는 sigaction 구조체가 필요하다. 참고 : https://velog.io/@two_jay/sigaction 신호를 받을 때 "받은 신호를 원하는 대로 처리할 수 있게 만들어주는", 함수 (+구

Minitalk - IPC
제한 사항 : SIGUSR1과 SIGUSR2만을 사용해서 Client의 문자열을 서버로 보내기. Bonus : 클라이언트와 서버는 매 시그널에 대해 주고받아야 한다. (UDP처럼 8번주고 8번 받으면 그냥 출력하는 방식X) 핵심 : 보낼 문자의 비트값을 클라이언트에서 0이면 SIGUSR1을, 1이면 SIGUSR2를 보내주는 방식. 초기설계 > Client : 비트마다 SIGNAL전달 매번 usleep사용 Server : 시그널을 받을 때 마다 index를 증가시키고 8이되면 8비트를 받았다고 가정하고 들어간다. 문제점 : 1000자로 20번 정도 테스트를 해보면 가끔 인식할 수 없는 특수문자 ?류가 노출된다. 현상 : 시그널 주는것과 받는 것을 하나하나 출력해 비교해보니 비트 한 칸씩 밀리는 경우가 있었다. 원인 : 시그널은 보내는 속도에 비해 처리속도가 느리고, **핸들러가 도는 동안 시그널이 오면
[minitalk] 전체 코드 흐름, feedback
- unix 신호를 주고 받는 작은 데이터 교환 프로그램 코딩 글자를 이진법으로 바꾸고 → 8비트 만큼 쪼개서 보냄 → 이를 받는 곳에서 다시 8bit를 1byte로 바꿔야함(복원) client >client는 server의 pid와 송신할 문자열을 입력 인자로 받는다 PID, 인자 개수 예외처리 ./client "String" 형태의 인자 3개 100 이하는 시스템 프로세스, 99999 초과는 맥 환경에서 존재할 수 없는 pid이므로 예외처리 문자열을 받아서 비트 단위로 신호 송신하는 함수 unsigned char로 형변환하여 128~255까지 처리한다. 문자열에서 char형 하나하나 체크 1) 맨 앞자리부터 보내기 위해 7-bit index만큼 비트 시프트 2) 비트연산자 AND 연산, 둘 중 하나라도 0이면 결과가 0 3) kill(SIGUSR1) or `kill(SIGUSR
Minitalk
Guacamole SSH 평가 원격으로 평가하기 위해서는 과카몰리 SSH 터미널 화면을 2개 이상으로 분리해야한다. tmux 사용법 Execution make or make all or make bonus bash ./server bash ./client [SERVER PID] [SEND MESSAGE] 과제 요구 조건 클라이언트가 실행될 때에 PID를 표시해야 한다. 서버는 문자열이 수신되면 해당 문자열을 표시해야 한다. 서버와 클라이언트의 통신은 오직 UNIX signal 중 SIGUSR1과 SIGUSR2 두