使用带有一些空参数的execl

时间:2013-09-26 10:09:03

标签: c exec

程序从配置文件中读取一些值,一些是定义的,一些不是,一些值为0,一些是活动的。

我有以下代码:

    char *arg1="", *arg1_value="", *arg2="", *arg2_value="", *arg3="", *arg3_value="", *arg4="", *arg4_value="";

    //part where I read from config file

    execl("./test", "test", arg1, arg1_value, arg2, arg2_value, arg3, arg3_value, arg4, arg4_value, (char*) 0);

我如何使用execl但是如果某些变量丢失或设置为0而不影响其他变量?我确信这不是最好的方法,将它们的值设置为“”

2 个答案:

答案 0 :(得分:1)

我假设每个argX都是"-xxxx"argX_value这样的开关,它是相应的值,如果定义了argX,你总是想要传递它们。然后,你可以使用execv()而不是execl()

#define MAXARGS  4 

char *argv[2*MAXARGS+2];
int  i, argc;

argv[0] = "prog";
argc = 1;
if( arg1 && strcmp( arg1, "" ) != 0 ) {
     argv[argc++] = arg1;
     argv[argc++] = arg1_value;
}
// the same for arg2 to arg4

argv[argc] = NULL;

execv( "./prog", argv );

答案 1 :(得分:0)

使用默认值初始化参数并将适当的参数(通过检查值是否为默认值)传递给execl可能是我们在这种情况下唯一的选择。

if(argv1 == defval_arg1)
         execl("./prog","prog", "required args in case argv1 is missing according to syntax of ./prog");
if(argv2 == defval_arg2)
         execl("./prog","prog", "required args in case argv2 is missing");

更新

如果要检查更多参数,可以通过检查args的值,使用loop来形成要传递的args数组。

for(i=0;i<10;i++){ 
  if (args[i]!=default_value_args[i]) { 
  args_2b_passed[j++]=args[i];
  }
} 

然后使用args_2b_passed数组使用exec函数的varient。 man 3 exec获得更多帮助。