使用system命令传递参数

时间:2013-08-02 10:24:06

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

我有一个可执行程序,可以运行在网络中的几个PC中。 首先它获得主机名(pc-001 .. pc-013等)。然后我需要根据其主机名在偶数PC和(server2)上安装一个网络驱动器(server1)。

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

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

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

2 个答案:

答案 0 :(得分:3)

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

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

答案 1 :(得分:2)

您可以构建传递给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); }

请注意给定的usernamepassword。像username这样的"user; somenaughtycommand"(没有引号)会让你做恶梦。谨防code injections,因此测试usernamepassword在某种程度上是否有效,或者适当地逃避它们。不要忘记测试system库调用的结果。

您可以查看cmdbuf中输入的字符数,即snprintf的结果。如果是>= sizeof(cmdbuf),您可能应该避免拨打system