gpt4 book ai didi

c - 使用 C 程序和 libssh 来自远程计算机的 scp .tar 文件

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

我编写了一个使用 libssh scp API 从远程设备读取文件的代码。

我有一个特定要求,其中我想从远程设备 scp .tar 文件。我能够将 .tar 内容读入缓冲区,但我不确定如何从该缓冲区创建 .tar 文件。

如有任何帮助,我们将不胜感激。

谢谢。

代码片段:

   char      *t_filename, t_buffer[32768];
....
t_rc = ssh_scp_pull_request(t_scp);
switch(t_rc)
{
case SSH_SCP_REQUEST_NEWFILE:
t_filesize = ssh_scp_request_get_size(t_scp);
t_filename = strdup(ssh_scp_request_get_filename(t_scp));
t_filemode = ssh_scp_request_get_permissions(t_scp);
fprintf(stderr, "Receiving file %s, size %d, permisssions 0%o\n", t_filename, t_filesize, t_filemode);
ssh_scp_accept_request(t_scp);
t_rc = ssh_scp_read(t_scp, t_buffer, sizeof(t_buffer));
if(t_rc == SSH_ERROR)
{
fprintf(stderr, "Error receiving file data: %s\n", ssh_get_error(in_session));
ssh_scp_close(t_scp);
ssh_scp_free(t_scp);
return t_rc;
}
fprintf(stderr, "Bytes received = %d\n", t_rc);
FILE *fptr = fopen(t_filename, "w");
if(NULL != fptr)
{
fwrite(t_buffer,sizeof(t_buffer),1,fptr);
fclose(fptr);
}
break;
}

最佳答案

使用 open()fopen() 创建本地文件,然后使用 write()fwrite()。完成后,调用 close()fclose()

更新了您的代码片段,未进行编译测试,但为您提供了想法。

应该重复远程读取,直到接收到整个文件,此外,您可能会收到小于 sizeof (t_buffer) 的 block ,因此不要写出比收到的数据更多的数据。

   char      *t_filename, t_buffer[32768];
....
t_rc = ssh_scp_pull_request(t_scp);
switch(t_rc)
{
case SSH_SCP_REQUEST_NEWFILE:
t_filesize = ssh_scp_request_get_size(t_scp);
t_filename = strdup(ssh_scp_request_get_filename(t_scp));
t_filemode = ssh_scp_request_get_permissions(t_scp);
fprintf(stderr, "Receiving file %s, size %d, permisssions 0%o\n", t_filename, t_filesize, t_filemode);
FILE *fptr = fopen(t_filename, "w");
if(NULL == fptr)
{
fprintf (stderr, "Error opening local file: %s, error %s\n", t_filename, strerror (errno));
ssh_scp_deny_request (t_scp, "Unable to open local file");
break;
}
ssh_scp_accept_request(t_scp);

do
{
t_rc = ssh_scp_read(t_scp, t_buffer, sizeof(t_buffer));
if(t_rc == SSH_ERROR)
{
fprintf(stderr, "Error receiving file data: %s\n", ssh_get_error(in_session));
fclose(fptr);
ssh_scp_close(t_scp);
ssh_scp_free(t_scp);
return t_rc;
}
fprintf(stderr, "Bytes received = %d\n", t_rc);
if (fwrite(t_buffer,t_rc,1,fptr) != 1)
{
fprintf (stderr, "Error writing file data: %s\n", strerror (errno));
fclose(fptr);
ssh_scp_close(t_scp);
ssh_scp_free(t_scp);
return t_rc;
}
} while (t_rc != 0);
fclose (fptr);
break;
}

关于c - 使用 C 程序和 libssh 来自远程计算机的 scp .tar 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36934767/

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