2016-08-04 2 views
-1

나는 3200 그래서 같은 수레를 쓰고 읽을 호출C 소켓 배수

모든 데이터는 1 개 쓰기로 작성하지만이 개 읽기 소요
float *fft = new float[3200]; 
int inRead = 0; 
while (inRead < (3200*4)) { 
    //sleep(1); 
    int bytesRead = read(sd, fft + inRead, (3200*4) - inRead); 
    inRead += bytesRead; 
} 

모든 데이터를 얻기위한 호출. 첫 번째 읽기는 11584를 반환하고 두 번째 읽기는 1216을 반환합니다.

문제는 두 번째 읽기 호출이 단지 0을 읽는 것입니다. 그러나 절전 호출의 주석을 제거하면 올바른 데이터를 모두 읽습니다.

수면없이 데이터를 가져 오는 더 좋은 방법이 있습니까?

+0

이어야하며, 다른 형식의 프로세스 통신을 사용할 수 있습니까? 파이프는 그들이 차단하기 때문에 찾고있는 것일 수 있습니다. –

+1

소켓이 어떻게 설정되었는지 알려줄 필요가 있습니다. 즉, [mcve]를 제공하십시오. 그러나 처음에는'read'의 반환 값을 검사해야합니다. 'read'는 에러시'-1'을 반환 할 수 있습니다.이 경우'inRead'에 추가해서는 안됩니다. 올바르게 구현 되었다면 여러 개의'read' 호출에 문제가 없어야합니다. 따라서 우리는 완전한 코드를 볼 필요가 있습니다. – kaylum

+0

예, 저는 이미 그 프로젝트에 깊이 들어가 있습니다. 다시 그런 요소가 있습니다. – nicolas

답변

0

오프셋을 혼합하고 있습니다. inRead은 바이트 단위로 측정되지만, fft에 추가하면 포인터 연산 규칙에 따라 sizeof float이 곱해집니다. read() 호출의 오프셋 표현식은

((char*)fft)+inRead 
+0

오, 감사합니다. – nicolas