gpt4 book ai didi

c - libssh2_scp_recv 未填充 struct stat

转载 作者:行者123 更新时间:2023-11-30 17:59:04 26 4
gpt4 key购买 nike

我可以使用以下命令成功地将文件从一端发送到另一端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 );

即使 channel 不为 NULL,file_info 中的任何其他字段也会为空。

我的 session 已正确打开并且适用于任何其他 SSH 操作(运行远程命令、发送文件...)

我正在使用“libssh2-1.3.0”。

请问有什么线索吗?

真的谢谢。

<小时/>

编辑:

我将第三行更改为:

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`.

就是这样。返回的 channel 是有效的,我可以从中读取。 libssh2_session_last_errno() 没有给出错误,但 st_size 仍然为空。

最佳答案

尝试进行一些错误检查,以便我们可以准确地看到发生了什么:

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

希望这有帮助。

问候。

关于c - libssh2_scp_recv 未填充 struct stat,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11766636/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com