2013-05-05 5 views
1

채팅 클라이언트와 서버를 쓰려고하는데 클라이언트가 콘솔에서 메시지를 쓰는 동안 서버에서 messeges를 인쇄 할 수 있어야합니다.C에서 동시 읽기 및 쓰기 (stdin, stdout)

그래서 사용자 입력을 읽어야하는 pthread를 만들고 주 스레드가 서버에서 messeges를 인쇄합니다. 그러나 뭔가를 입력하면 messege를 입력하는 동안 입력중인 텍스트가 콘솔에 표시됩니다. 내가 어떻게 고칠 수 있니? 예를 들어

: 내가 서버에서 messege를 얻을 수 (아직 입력 완료되지 않았습니다)는 다음과 같이 표시됩니다 때 다음 "ABCDEF"를 입력 해요 : [Chatuser1] ABCDEF

: 안녕하세요

+2

예상되는 결과는 무엇입니까? 입력 한 후에 만받은 메시지를 보려면? – SatA

+0

tty를 원시 모드로 설정하고 메시지를 인쇄 한 후 화면을 새로 고침해야합니다. 콘솔의 –

답변

0

콘솔에없는 두 개의 별도 편집 상자 요소가있는 GUI에서이 작업을 수행하는 것이 좋습니다.

콘솔에서 계속하려면 콘솔 버퍼를 직접 수정해야합니다.

새 출력 메시지가 도착할 때마다 현재 입력 메시지를 백업해야 콘솔을 쓸 수 있으므로 사용자 정의 스크롤을 수행하고 입력 메시지를 다시 추가 할 수 있습니다. 스레드 syncronisation은 버퍼에서 입출력이 섞이지 않도록해야합니다.

그렇지 않으면 사용자가 부분적으로 입력 된 입력에 액세스 할 수 없기 때문에 사용자 지정 키 처리를하지 않을 것이라고 생각합니다.

+0

, ncurses가 해결책이 될 수 있음 –

1

멀티 스레드 프로그램에서 입출력을 동기화하기 위해 세마포어 또는 뮤텍스와 같은 동기화 기술 사용