c语言编程实现scp功能,scp源码浅析

本文探讨了C语言实现SCP功能的原理,通过分析源码揭示了SCP如何通过SSH连接远程系统执行命令进行文件传输。文章重点介绍了如何处理命令行选项、文件的分块读写以及递归传输子目录的实现,展示了SCP高效且便捷的文件传输机制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

背景:

经常使用scp传文件,发现它真的很给力,好奇心由来已久!

恰好接到一个移植SSH服务到专有网络(非IP网络)的小任务,完成工作又能满足好奇心,何乐而不为!

我只从源码浅浅的分析一下,后续有更多想法再补充

源码赏析:

1、所有的故事都从main开始,也从main结束。(main也很无辜,它只是打开了计算机的一扇窗):

作为一个命令行工具,命令行是必须要处理的,这里scp也是采用常见的getopt来处理命令行。

while ((ch = getopt(argc, argv, "dfl:prtvBCc:i:P:q12346S:o:F:")) != -)

上面的字符串就是可以使用的命令行选项,带冒号的表示有参数,比如 d 表示可以在shell输入 scp -d ...,l: 表示可以在shell输入 scp -l 1000 ... ,当然这样重点要提到 -r, 加上它就可以递归传输子目录,非常实用,其他参数我就不再详解了。

接下来会看到如下代码:

/* Command to be executed on remote system using "ssh". */

(void) snprintf(cmd, sizeof cmd, "scp%s%s%s%s",

verbose_mode ? " -v" : "",

iamrecursive ? " -r" : "", pflag ? " -p" : "",

targetshouldbedirectory ? " -d" : "");

可以看到,注释里提到了,这是要通过ssh到远程linux系统(你的目的电脑)去执行的一条命令,同样也是scp喔,所以这是scp神奇又方便的原因之一!

它通过ssh连接到目的机器,同样执行了一个scp程序来实现数据通路,完成数据接收或者发送。

注意:上面隐含了2个条件:

(1)你本机或者远程机,两者之间必须有一个ssh服务端

(2)两者都必须有scp这个工具

2、文件的发送和接收

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值