我正在尝试通过 sftp 下载文件,到目前为止,我已经通过 ssh 会话连接到服务器,然后使用 ssh 会话打开了一个 sftp 会话,一切似乎都很好。我在服务器上打开了一个文件,我正在使用 sftp_read() 从文件中获取字节块。我的代码是:
char buffer[16384] = {};
ssize_t nbytes;
ssize_t ntotal = 0;
for (;;) {
nbytes = sftp_read(file, buffer, sizeof(buffer));
if (nbytes == 0) {
break; // EOF
}
localFile << buffer;
ntotal += nbytes;
//sftp_seek(file, ntotal);
}
但是由于某种原因,在读取块时,前 20 个字节是正确的,但第 21 个字节直到第 16384 个字节是错误的。事实证明,读取 20 个字节后,读取器跳转到文件的第 16384 个字节并继续读取,就像什么都没发生一样。
我做了一些测试,如果我将缓冲区更改为任何大小,无论是 16384、21、22、50 等,它在正确读取 20 个字节后仍会跳转到第 16384 个字节。
是否有一个原因?有没有比 libssh 和 sftp 更好的库,我可以毫无错误地使用?