C에서 다중 프로세스를 사용해 cursor control시 동기화 문제
글쓴이: maga33 / 작성시간: 월, 2008/12/08 - 4:20오후
제가 linux환경에서 c로 소켓을 이용한 간단한 TCP 채팅 프로그램을 만들고 있는데요
메시지가 출력되는 창과 메시지를 입력받는 창, 그리고 접속자가 표시되는 창 세개를 각각 WINDOW를 이용해 만들고
에서 제공하는 mvwprintw등을 이용해 여러개의 윈도우를 종횡 무진 이동하며 출력을 해 주고 있습니다.
그런데 채팅 프로그램의 특성상 받은 메시지의 출력과 보낼 메시지의 입력을 동시에 받아야 하기 때문에, fork()를 이용해 두개의 프로세스를 가지고 작업을 하는데요
문제는 두 프로세스에서 커서 컨트롤을 같이 하다보니 동기화가 되지 않아서 간혹 출력이 망가지더군요;
가령 화면 밑의 message >> 라고 되어 있는 부분에서 입력을 받아야 되는데, 다른 프로세스가 받은 메시지를 출력하면서 엉뚱하게 커서가 화면 맨 위로 가서 그곳에서 메시지를 받게 된다던지;;
기능상으론 문제가 없지만 이런 문제땜에 출력이 엉망이 되서요.. 혹시 이런 부분에 대해 해결책이 있는지 여쭤보고 싶습니다.
Forums:
두곳에서 입력을
두곳에서 입력을 받기 위해 fork()를 사용한다면 조금 과한듯하고, select(), poll() (리눅스의 경우, epoll())을 사용하여 소위 IO Multiplexing을 사용하는게 좋겠습니다.
또한, 다수개가 출력을 위해 콘솔을 공유하는(?) 형태라면, 이를 공통 루틴으로 만들어(출력 전용쓰레드등) 구현하는게 좋을 듯합니다.
아니면, 입력 윈도우, 출력윈도우를 사용하여 개발하는 것도 방법이겠습니다.
------------------ P.S. --------------
지식은 오픈해서 검증받아야 산지식이된다고 동네 아저씨가 그러더라.
------------------ P.S. --------------
지식은 오픈해서 검증받아야 산지식이된다고 동네 아저씨가 그러더라.
댓글 달기