[42Seoul] - Minitalk (subject)

Joey·2022년 6월 22일
0

42 SEOUL

목록 보기
1/20
post-thumbnail

무엇을 하는 과제인가?

Server와 Client 프로그램을 각각 만들어서 UNIX Signal로 통신하게 만드는 것.


기본 지시사항

  • 여러분의 프로젝트는 Norminette 기준에 따라 작성되어야 합니다. 보너스 파일이나 함수가 있는 경우, 해당 파일/함수도 Norminette 기준을 체크하는 데에 포함해야 하며, Norminette 에러가 발생할 시에는 여러분의 프로젝트는 0점을 받게 됩니다.
  • 정의되지 않는 동작인 경우 이외에는 여러분이 작성하신 프로그램이 예기치 않게 종료되면 안됩니다 segmentation fault, bus error, double free 등. 만약 여러분의 프로그램이 예기치 않게 종료된다면, 작동하지 않은 것으로 간주되어 평가에서 0점을 받게 됩니다.
  • 힙에 선언한 모든 메모리 영역은 free로 처리되어야 합니다. 메모리 누수는 용납되어서는 안됩니다.
  • 서브젝트가 요구할 시 Makefile을 제출하여야 합니다. 여러분이 작성하신 Makefile은 -Wall -Wextra and -Werror 플래그에 따라 컴파일을 해야하며, 컴파일 이후에 다시 리링크되지 않아야 합니다.
  • 여러분이 작성하신 Makefile 에서는 다음의 룰을 정의하고 있어야 합니다. $(NAME), all, clean, fclean, re
  • 프로젝트에 보너스를 제출하려면, Makefile에 bonus 규칙을 포함해야하며, 해당 규칙은 프로젝트의 메인 파트에서 금지되었던 모든 다양한 헤더, 라이브러리,또는 함수들을 Makefile에 추가할 수 있습니다. 보너스는 반드시 _bonus.{c/h} 라는 다른 파일에 있어야 합니다. 필수 파트와 보너스 파트는 개별적으로 평가될 것입니다.
  • 해당 프로젝트에서 libft를 사용하는 경우, 해당 라이브러리의 소스와 Makefile을 libft 폴더에 복사해야 합니다. 프로젝트의 Makefile은 Makefile을 사용하여 라이브러리를 컴파일한 다음에 여러분이 작성하신 프로젝트를 컴파일 해야합니다.
  • 제출할 필요가 없고 채점되지 않더라도 우리는 여러분이 프로젝트를 위한 테스트 프로그램을 만들 것을 권장합니다. 이 프로그램은 여러분의 과제물과 동료들의 과제물을 쉽게 검증할 기회를 제공할 것입니다. 평가하는 동안 이 테스트 프로그램들이 특히 유용하다는 것을 알게 될 것입니다. 평가 중에는 여러분의 테스트 프로그램과 평가 받는 동료의 테스트 프로그램들을 자유롭게 사용할 수 있습니다.
  • 할당된 git 저장소에 과제물을 제출하세요. 오직 git 저장소에 있는 과제물만 채점 할 것입니다. Deepthought가 평가를 하게 된다면, 동료평가 이후에 수행됩니다. 만약 Deepthought가 평가 중 오류가 발생한다면, 그 즉시 평가는 중지될 것입니다.
  • 실행파일은 각각 client와 server로 이름을 지어야 합니다.
  • 여러분은 세심하게 에러를 처리하셔야 하며, 여러분이 작성하신 프로그램이 예기치 않게 종료되면 안됩니다 (Segmentation fault, bus error, double free, 등).
  • 여러분이 작성하신 프로그램에서 메모리 누수가 발생하면 안됩니다.
  • 필수파트를 위해서 다음의 함수만을 사용하실 수 있습니다. :
    write
    signal
    sigemptyset
    sigaddset
    sigaction
    kill
    getpid
    malloc
    free
    pause
    sleep
    usleep
    exit

Mandatory

  • 여러분께서는 클라이언트와 서버가 서로 통신하는 프로그램을 작성하셔야 합니다.
  • 서버와 클라이언트 중 서버가 먼저 실행되어야 하며, 실행된 후에 반드시 PID를 표시해야 합니다.
    클라이언트가 실행될 때 다음의 매개변수를 받습니다 :
    서버 PID
    전송할 문자열
  • 클라이언트는 매개변수로 전달한 문자열을 서버로 통신해야 합니다. 서버는 문자열이 수신되면 해당 문자열을 표시해야 합니다.
  • 여러분이 작성하신 서버와 클라이언트의 통신은 오직 UNIX signal을 이용하여야만 합니다.
  • 서버는 문자열을 매우 빠른 속도로 표시할 수 있어야 합니다. 즉, 표시되는 시간이 너무 길다고 생각된다면, 그건 너무 길다고 여겨야 합니다. (힌트 : 100개의 문자로 이루어진 문자열을 표시하는 데 1초가 걸린다면 그건 어마어마하게 긴 것입니다.)
  • 서버가 재시작할 필요없이 여러 클라이언트로부터 문자열을 연속으로 수신할 수 있어야 합니다.
  • SIGUSR1과 SIGUSR2 두 신호만 사용할 수 있습니다.

Bonus

  • 소규모 수신 확인 시스템을 추가해보세요.
  • 유니코드 문자도 지원하도록 해보세요.
profile
세상을 이롭게 하는 프로그램 만들기

0개의 댓글