クライアントからリモートサーバーにファイルをコピーしたいのですが、libsshライブラリのSFTPAPIを使用してコピーする方法がわかりません。
状況は次のとおりです。SSHセッションが開いており、SFTPセッションも開いているので、libsshの統合機能を使用して、ファイルを作成し、クライアントからサーバーに書き込むことができます。
sftp_transfer(sourceFile(like c:\ my document \ hello world.txt)、RemoteFile(/home/user/hello world.txt)のような単純な関数を使用して、クライアントからサーバーにファイルをコピーする簡単な方法が見つかりませんでした。 )、right(読み取りと書き込み))?
チュートリアルから理解したことでは、最初にリモートロケーション(サーバー)にファイルを作成し、次に次のコード行でこのファイルを開きます。
file = sftp_open(sftp, "/home/helloworld.txt",access_type,1);
その後、ファイルはサーバー上に作成され、次にこの作成されたファイルにバッファーを使用して書き込みます。
const char *helloworld = "Hello, World!\n";
int length = strlen(helloworld);
nwritten = sftp_write(file, helloworld, length);
私の質問は、.docファイルなどのファイルがあり、そのファイルをc:\mydocument\document.doc
リモートサーバーからリモートに転送/アップロードしたい/home/user/document.doc
場合、この方法でどのように行うことができますか?
このファイルを関数に入れて、サンプル関数sftp_write()
のhelloworldのように送信するにはどうすればよいですか?
私はプログラミングが十分に理解できないかもしれませんが、私は本当にそれを理解しようとしました、そして私はそれに固執しています。
よろしくお願いします
テストに使用したコードのサンプルを以下に示します。
// Set variable for the communication
char buffer[256];
unsigned int nbytes;
//create a file to send by SFTP
int access_type = O_WRONLY | O_CREAT | O_TRUNC;
const char *helloworld = "Hello, World!\n";
int length = strlen(helloworld);
//Open a SFTP session
sftp = sftp_new(my_ssh_session);
if (sftp == NULL)
{
fprintf(stderr, "Error allocating SFTP session: %s\n",
ssh_get_error(my_ssh_session));
return SSH_ERROR;
}
// Initialize the SFTP session
rc = sftp_init(sftp);
if (rc != SSH_OK)
{
fprintf(stderr, "Error initializing SFTP session: %s.\n",
sftp_get_error(sftp));
sftp_free(sftp);
return rc;
}
//Open the file into the remote side
file = sftp_open(sftp, "/home/helloworld.txt",access_type,1);
if (file == NULL)
{
fprintf(stderr, "Can't open file for writing: %s\n",ssh_get_error(my_ssh_session));
return SSH_ERROR;
}
//Write the file created with what's into the buffer
nwritten = sftp_write(file, helloworld, length);
if (nwritten != length)
{
fprintf(stderr, "Can't write data to file: %s\n",
ssh_get_error(my_ssh_session));
sftp_close(file);
return SSH_ERROR;
}