write, read함수를 윈도우와 통신에서 쓸때 문제점이..
글쓴이: 익명 사용자 / 작성시간: 수, 2001/11/28 - 3:36오후
윈도우와 리눅스간에 통신을 짜는데요,
문제가 뭐냐면,
윈도우쪽에서 WriteFile(... 구조체...)를 보내면
리눅스에서 같은 형식으로 read(... 구조체...) 해도 못받는다는 겁니다.
이것을 해결하려면 윈도우에서 구조체를 보낸후에 한번 더 0x0d 를 보내줘야
리눅스에서 알아먹더군요..
정리하면,
윈도우----------------------------
WriteFile(handle, struct, sizeof(struct)...) --1.
WriteFile(handle, 0x0d, ...) --2.
해야 리눅스에서..........
read(fd, struct, ...) --3.
가 먹습니다.
위에서 두번째명령을 하지 않으면 리눅스의 read에서 블록된다는 말입니다.
즉, 윈도우에서 보내줄때 CR을 뒤에 붙여줘야 read()에서 파일의 끝을 알아먹
는다는말인데요, 제가 보기에는 ICANON을 없애주면 지정된크기만큼 받거나 보
낼 수 있다고 써 있는데 이것이 잘 안되네요..
도움 부탁 합니다.
참고로, 널터미네이트된 캐릭터들의 송수신은 잘 됩니다. 문제는 구조체를 쓸
때만 이런 현상이 나는군요.. 구조체는 memset 되어 있습니다.
Forums:
Re: write, read함수를 윈도우와 통신에서 쓸때 문제점이..
WriteFile 이라는 함수가 자체적으로 buffering 하는 함수가 아닐까요?.
그러니까.. \n 이 들어올때 까지 보내지 않는것으로 봐서.
line buffering 하는 함수 같네요.
다른 함수 써서 보내 보시죠.
아님... Flush 명령어 잇음..그거 써 보시던지..
^^
Re: write, read함수를 윈도우와 통신에서 쓸때 문제점이..
read()는 대표적인 Line buffer 함수입니다.
즉 마지막이 \n이거나 아니면 read buffer가 풀일때까지 블럭이 되는것이지요.
참고 하시기 바랍니다.
댓글 달기