On Tuesday 22 October 2013 18:58:17 Darren wrote:
>  Hi Kevin,
> 
> Assuming remote to local transfer:
> 
> You read the first chunk of data, and use sftp_seek to move the file pointer
> 

There is absolutely no need to call sftp_seek() you only need it if you resume 
a transfer. The API works the same way as the POSIX API. Files should be 
transferred in small chunks.

#define MAX_XFER_BUF_SIZE 16384

char buf[MAX_XFER_BUF_SIZE];

file = sftp_open(sftp, path, O_RDONLY, 0);

for (;;) {
        bytesread = sftp_read(file, buf, MAX_XFER_BUF_SIZE);
        if (bytesread == 0) {
                break; /* EOF */
        } else if (bytesread < 0) {
                /* ERROR HANDLING */
        }

        byteswritten = write(fd, buf, MAX_XFER_BUF_SIZE)
        if (byteswritten != bytesread) {
                /* ERROR */
        }
}

This way I can transfer files which are several gigabyte of size.


        -- andreas

-- 
Andreas Schneider                   GPG-ID: CC014E3D
www.cryptomilk.org                [email protected]


Reply via email to