0

を使用して、一方の端からもう一方の端にファイルを正常に送信できます libssh2_scp_send()。を使用してファイルを受信しようとすると 、 パラメータにデータが入力libssh2_scp_recv()されません。struct statファイルサイズは常に「0」を返します。

struct stat    file_info;

LIBSSH2_CHANNEL *channel = libssh2_scp_recv( session, source_file, &file_info );

printf( "file_info.st_size = %lu.\n",       file_info.st_size );

NULL ではありませんが、他のフィールドfile_infoも空になります。channel

私のセッションは正しく開かれ、他の SSH 操作 (リモート コマンドの実行、ファイルの送信など) で動作します。

「libssh2-1.3.0」を使用しています。

手がかりはありますか?

本当にありがとう。


編集:

3 行目を次のように変更しました。

fprintf( stderr, "** file_info { st_size = %lu; st_atime = %lu }. SSH last error = %d",
    file_info.st_size, file_info.st_atime,
    libssh2_session_last_errno( info->session ) );

結果は次のとおりです。

** file_info { st_size = 0; st_atime = 0 }. SSH last error = 0`.

それでおしまい。返されたチャネルは有効で、読み取ることができます。libssh2_session_last_errno()エラーは発生しませんが、st_sizeそれでも空になります。

4

2 に答える 2

0

何が起こっているかを正確に確認できるように、いくつかのエラー チェックを実行してみてください。

channel = libssh2_scp_recv(session, path_to_file, &struct_stat);
if (!channel && (libssh2_session_last_errno(session) != LIBSSH2_ERROR_EAGAIN)) 
{
    if ((struct_stat.st_mode == 0) && (struct_stat.st_atime == 0) && \
           (struct_stat.st_mtime == 0) && (struct_stat.st_size == 0)) 
    {
       fprintf(stderr, "No file found and the error %d\n", \
                     libssh2_session_last_errno(session));

       exit (EXIT_FAILURE);
   }
}

この助けを願っています。

よろしく。

于 2012-08-01T21:09:55.367 に答える