2

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

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

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

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

4

2 回答 2

3

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

小心给定的usernameand password。一个username喜欢的字符串"user; somenaughtycommand"(不带引号)会给你带来噩梦。谨防代码注入,因此请测试两者usernamepassword在某种程度上是有效的,或者适当地逃避它们。不要忘记测试system库调用的结果。

您可能想要检查输入的字符数,cmdbufsnprintf的结果。如果是,>= sizeof(cmdbuf)你可能应该避免打电话system

于 2013-08-02T10:27:28.733 回答
3

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

char command[128];
snprintf(command, sizeof(command), "net use x: \\\\server1\\shares /user:%s %s",
         some_username, some_password);
system(command);
于 2013-08-02T10:25:42.077 回答