2012-06-19 2 views
0

나는 이것이 아마도 전에 물어 봤지만 나의 문제 때문에 해결책을 찾을 수 없다는 것을 안다. 루프에서 호출하고 하나의 Byte를받는 함수 receive(int recv)이 필요합니다. 필자는 지금까지 시리얼 포트 (termios.h)를 설정했고, 수신 할 수있었습니다. read() 그러나 포트의 전체 버퍼 만 수신 할 수 있습니다. 따라서 read(fd, recv, 255);은 항상 여러 바이트를 반환합니다. 내가 필요한 것은 바이트를 수신하는 버퍼이며, receive(int recv)이 호출되면 항상이 버퍼의 첫 번째 바이트를 제공합니다. 그런 버퍼는 어떻게 생겼습니까? 나는 이것에 대한 어떤 도움이라도 기꺼이 고맙게 생각할 것이다! 감사합니다.리눅스에서 시리얼 포트로부터 하나의 바이트를 받음

+0

을, 나는/생각/당신은 직렬 포트의 정수를 읽으려고? 현재'ssize_t read (int fd, void * buf, size_t count)'를'int recv'를 두 번째 매개 변수로 호출하는 것처럼 보입니다. 이것은 틀린 것입니다. –

답변

2

이 충분해야한다 : -이 정확한지 코드에서

// ... 
char buf[1]; 
read(fd, &buf, 1); 
// ... 
+0

나는 그것을 생각하고 있었지만, 다시 한 번 크기가 1 바이트 만되면 버퍼 오버 플로우가 쉽게 발생하지 않습니까? – tzippy

+0

아니요.이 함수는 사용 가능한 1 바이트가 있으면 1 바이트를 씁니다. 그렇지 않으면 0입니다. 그것은 당신이'read()'에 넘기는 값보다 작게 만 오버 플로우 될 수 있지만 그렇게하지 않으면 아무 일도 일어나지 않을 수 있습니다. – glglgl