【问题标题】:pass parameter using system command使用系统命令传递参数
【发布时间】:2013-08-02 10:24:05
【问题描述】:

我有一个在网络中的多台电脑上运行的可执行程序。 首先,它获取主机名(pc-001.. pc-013 等)。然后我需要在偶数 pc 上安装一个网络驱动器 (server1),并根据其主机名在赔率一个上安装 (server2)。

我的问题是我使用系统调用来运行 dos 命令 'net use' 例如

system ("net use x: \\\\server1\\shares /user:username pass");

如何将变量传递给用户名?用户名是我知道它的值的主机名,并且所有计算机的传递都是相同的。

【问题讨论】:

    标签: c parameter-passing c++builder system-calls


    【解决方案1】:

    您可以构建传递给 system 的命令,例如喜欢

     char cmdbuf[256];
     snprintf(cmdbuf, sizeof(cmdbuf), 
              "net use x: \\\\server1\\shares /user:%s %s", 
              username, password);
     int err = system(cmdbuf);
     if (err) { fprintf(stderr, "failed to %s\n", cmdbuf); 
                exit(EXIT_FAILURE); }
    

    注意给定的usernamepasswordusername 像字符串 "user; somenaughtycommand"(不带引号)会让你做噩梦。当心code injections,所以测试usernamepassword 是否有效,或者适当地转义它们。不要忘记测试system 库调用的结果。

    您可能想要检查输入 cmdbuf 的字符数,即 snprintf 的结果。如果是>= sizeof(cmdbuf),你可能应该避免调用system

    【讨论】:

      【解决方案2】:

      在使用之前使用snprintf 构造命令字符串:

      char command[128];
      snprintf(command, sizeof(command), "net use x: \\\\server1\\shares /user:%s %s",
               some_username, some_password);
      system(command);
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2023-04-01
        • 1970-01-01
        • 2013-04-01
        • 2016-03-28
        • 1970-01-01
        • 1970-01-01
        • 2012-05-25
        相关资源
        最近更新 更多