使用system命令传递参数

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

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

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

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

您可以构建传递给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 。 像字符串"user; somenaughtycommand" (没有引号)这样的username会给你带来噩梦。 注意代码注入 ,因此测试usernamepassword在某种程度上是否有效,或者适当地逃避它们。 不要忘记测试system库调用的结果。

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

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

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