我正在尝试通过C中的套接字将二进制文件发送到嵌入式平台,但是当我在发送它之后运行它只是给了我段错误(通过ftp发送工作正常,但它非常慢)。
在同一系统中发送二进制文件工作正常(嵌入式是little-endian所以我不认为它的endian问题)。
可能是什么问题?该计划是mft.cpp
答案 0 :(得分:1)
您假设每个read
都返回您想要读取的字节数。那是不对的。您应该始终检查read
返回值,看看是否有你想要的字节数。
这也意味着您可以将发送循环重写为:
int bytesLeft = file_length;
char buf[1024]; //no need to reallocate it in the loop
while(bytesLeft > 0)
{
int to_read = 1024;
if(bytesLeft < to_read)
to_read = bytesLeft
int bytesRead = read(new_sock_id, buf, to_read);
if(error("reading file", false)) continue;
write(file, buf, bytesRead);
if(error("writing file", false)) continue;
bytesLeft -= bytesRead ;
}