C++实现SCP命令

scp命令的实现:

注意:仅适用于linux系统下,在window下会存在权限不足

实现代码

#include <iostream>
#include <cstdlib> 
#include <sys/stat.h> 
#include <sys/types.h> 

// 函数原型声明
bool checkDirectoryPermissions(const std::string& directory);
bool setDirectoryPermissions(const std::string& directory);

int main(int argc, char *argv[]) {
    // 检查命令行参数数量是否正确
    if (argc != 5) {
        std::cout << "用法:" << argv[0] << " <用户名> <IP地址> <远程文件路径> <本地目标目录>" << std::endl;
        return 1;
    }

    // 从命令行参数中获取远程主机的用户名、IP地址、远程文件路径和本地目标目录
    std::string username = argv[1];
    std::string ip_address = argv[2];
    std::string remote_file_path = argv[3];
    std::string local_directory = argv[4];

    // 检查目标目录的读写权限
    if (!checkDirectoryPermissions(local_directory)) {
        if (!setDirectoryPermissions(local_directory)) {
            std::cout << "无法设置目标目录权限!" << std::endl;
            return 1;
        }
    }
    // 构建 scp 命令
    std::string pass_command = "scp -r " + username + "@" + ip_address + ":" + remote_file_path + " " + local_directory;
    std::cout << pass_command << std::endl;

    // 执行 pass 命令
    int result = system(pass_command.c_str());

    // 检查命令执行结果
    if (result == 0) {
       std::cout << "文件传输成功!目标目录:" << local_directory << std::endl;
    } else {
        std::cout << "文件传输失败!" << std::endl;
    }

    return 0;
}
// 检查目录的读写权限
bool checkDirectoryPermissions(const std::string& directory) {
    struct stat info;
    if (stat(directory.c_str(), &info) != 0) {
        // 获取目录状态信息失败
        return false;
    }
    // 检查目录的读写权限
    if ((info.st_mode & S_IWUSR) == 0) {
        // 用户没有写权限
        return false;
    }
    // 默认情况下返回 false
    return false;
}

// 设置目录的读写权限
bool setDirectoryPermissions(const std::string& directory) {
    if (chmod(directory.c_str(), S_IRWXU) != 0) {
        
        return false;
    }
    return true;
}

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值