libssh2 libを使用して、デバイスとSFTPセッションを確立しています。libssh2 - SFTPでファイルを読み取る
しかし、ファイルを読み込んで出力を返そうとすると、完全なファイルは返されません。
ファイルの途中で制御文字(\0
など)があると思います。
コード:
sftp_handle = libssh2_sftp_open(sftp_session, filename, LIBSSH2_FXF_READ, 0);
if (!sftp_handle) return "-1";
char buf[99999];
int x = libssh2_sftp_read(sftp_handle, buf, sizeof(buf));
char * output = (char *)malloc(sizeof(char)*x);
memcpy(output, buf, x);
output[x] = '\0';
libssh2_sftp_close(sftp_handle);
************アップデート1 ************
私がしようとしているファイルreadはほぼすべてのascii文字を含むテキストファイルです。アップデート2 ************
x
バッファに書かれたバイト数とファイルが持っている
************〜98キロバイト(99999バイト)、libssh2_sftp_read
関数は30000からx
を返します。
'libssh2_sftp_read'が実際に返すものを確認しましたか?あなたが読もうとしたファイル、それはどのようなファイルですか?その内容は何ですか?埋め込みゼロを含むことができるバイナリファイルですか?バイナリファイルの場合は、テキスト出力( 'cout << output'など)を使わないでください。あなたが受け取るデータの目的は何ですか?どのようにデータを使用するのですか? –
'libssh2_sftp_read'と' memcpy'は '\ 0'で停止しませんので、' x'をチェックしてください。 –
'std :: string'を使い始めると、'(const)char * 'の' operator << 'は' \ 0'で止まります。 –