2013-08-02 96 views
1

我有一个可运行在网络中几台电脑上的可执行程序。 首先获取主机名(pc-001 .. pc-013等)。然后我需要安装一个网络驱动器(server1)在甚至个人电脑和(服务器2)基于其主机名的赔率之一。使用系统命令传递参数

我的问题是,我使用的系统调用运行DOS命令“NET USE”例如

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

我如何传递一个变量,以用户名?用户名是主机名,我知道它的价值和传递是相同的所有电脑。

回答

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。 A username喜欢字符串"user; somenaughtycommand"(不含引号)会给你做恶梦。谨防code injections,使测试既usernamepassword在某种程度上有效,或适当地逃离他们。不要忘记测试system库调用的结果。

你可能要检查放在cmdbufsnprintf结果的字符数。如果是>= sizeof(cmdbuf),您可能应该避免拨打system

3

使用snprintf构建的命令字符串,你使用它之前:

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

你忘了测试通过返回的错误代码'system' –

+0

@BasileStarynkevitch我只是显示原理。 –