定制psftp

前一段时间有个项目需要调用psftp传送文件, 现在总结一下:

1 putty版本 0.62

  开发环境vs2005

2 编译

   putty完整工程在这个目录下:  putty\WINDOWS\MSVC

3 定制psftp

  psftp的入口函数是  int main(int argc, char *argv[]), 在winsftp.c中定义。

   主要做了如下定制:

    (1)命令行参数(psftp.exe通过CreateProcess调用)

             通过命令行传入调用程序的信息,例如主窗口句柄等;

     (2)输出

             把psftp的输出定向到指定的文件;

             //通过fprintf直接输出。

     (3)把压缩进度通过进程间内存读写输送到调用程序。

            //进度通过WriteProcessMemory传递

            //定制函数:int sftp_put_file(char *fname, char *outfname, int recurse, int restart) 

            void SendMessageToMainWnd(INT16 nRatio, char* szPath);
            extern __int64 g_llTotalSize;
            extern __int64 g_llTotalSizeSent;
            extern int     g_ratio;

            int sftp_put_file(char *fname, char *outfname, int recurse, int restart) 

            {

                      ...

                     while (xfer_upload_ready(xfer) && !err && !eof) 
                      {
                       len = read_from_file(file, buffer, sizeof(buffer));
                       if (len == -1) {
                        printf("error while reading local file\n");
                        err = 1;
                       } else if (len == 0) {
                        eof = 1;
                       } else {
                        xfer_upload_data(xfer, buffer, len);
                        datasend.lo += len;
                        g_llTotalSizeSent += len;
                        newratio = ((float)datasend.lo)/((float)filelen.lo)*100;
                        g_ratio = ((double)g_llTotalSizeSent)/((double)g_llTotalSize)*100;
                        if(newratio!=oldratio)
                        {
                         oldratio = newratio;
                         SendMessageToMainWnd(g_ratio, fname);
                        }
                       }
                      }

                      ...

            }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值