c socket多次调用read

时间:2016-08-04 03:05:00

标签: c++ c sockets tcp

我正在编写3200个浮点数:

float fft[3200] = {0};
get_fft_frame(dev, fft, 3200); // rf sensor
int written = write(sd, fft, sizeof(fft));

然后像这样阅读:

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;
}

所有数据都写入1次写入,但需要两次读取调用才能获取所有数据。第一个读取返回11584,第二个读取返回1216。

问题是第二次读取调用只读取零。但是,如果我取消注释睡眠调用,它会读取所有正确的数据。

有没有更好的方法来获取数据而不睡觉?

1 个答案:

答案 0 :(得分:0)

你正在混淆你的补偿。 inRead以字节为单位进行测量,但是当您将其添加到fft时,它会被sizeof float乘以指针算法规则。 read()调用中的偏移表达式应为

((char*)fft)+inRead