System_programming_study_210708

Day9

지난번에 만든 채팅 프로그램을 응용해서, 여러 클라이언트에 연결하여 shell 기능을 할수있는 dshell(distributed shell) 프로그램을 구상하고 만들어보았다. 서버에서 원하는 명령을 클라이언트에 보내면, 클라이언트는 명령을 수행하고 결과를 다시 전송해야하는데, 이 과정에서 OS수업시간에 배웠던 dup2(), exec(), pipe() 등의 함수를 사용해야 했다. 솔직히 수업 과제로 비슷한 작업을 했을때, 사용법을 제대로 공부하지 않아서, 이상한 방식으로 사용했었는데, 다시 공부할 수 있는 상황이 생겨서 좋았다.

  1. 채팅서버 프로그램과 비슷하지만, dshell 프로그램은 구조적으로 좀더 복잡하고 고려해야 할 점이 많았다. 그래서 처음에는 프로그램을 작은 부분으로 나누기가 쉽지 않았다. 그렇지만 fshare2.0 버젼을 만들었을 때의 기억을 가지고 포기하지 않고 차분하게 생각해보니 조금 조금 무엇을 해야 할지 결정할 수 있었다. 오늘은 어느정도만 전체적인 구조를 고려하면서, 우선 하나의 클라이언트와 통신하는 버젼까지만 만들었다. 그렇게 작은 subtask를 완성하고 나니, 다음은 어떤것을 해야할지 좀더 수월하게 생각할 수 있었다. 다음 해야할 일은 좀더 복잡하게 느껴지지만, 작은 것 부터 조금씩 만들어가야겠다는 생각이 든다.

  2. dup2()를 사용해서 stdout의 결과를 받아올때, 에러가 나는 경우를 생각해서, stderr도 같이 사용하면 좋다. pipe() 함수를 사용할때는, close() 를 통해서 적절한 위치에 파이프를 닫아주는 것이 중요하다. 처음에 pipe를 접했을 때에 비해서, 단순히 read, write 할수있는 디스크립터라고 생각하니, 이해하기 쉽고 편했다.