我有一个可执行程序,可以运行在网络中的几个PC中。 首先它获得主机名(pc-001 .. pc-013等)。然后我需要根据其主机名在偶数PC和(server2)上安装一个网络驱动器(server1)。
我的问题是我使用系统调用来运行dos命令'net use',例如
system ("net use x: \\\\server1\\shares /user:username pass");
如何将变量传递给用户名? username是我知道其值的主机名,所有计算机的pass都相同。
答案 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); }
请注意给定的username
和password
。像username
这样的"user; somenaughtycommand"
(没有引号)会让你做恶梦。谨防code injections,因此测试username
和password
在某种程度上是否有效,或者适当地逃避它们。不要忘记测试system
库调用的结果。
您可以查看cmdbuf
中输入的字符数,即snprintf的结果。如果是>= sizeof(cmdbuf)
,您可能应该避免拨打system
!