使用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); }
请注意给定的username
和password
。 像字符串"user; somenaughtycommand"
(没有引号)这样的username
会给你带来噩梦。 注意代码注入 ,因此测试username
和password
在某种程度上是否有效,或者适当地逃避它们。 不要忘记测试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);