一、源码:
int split_parameters(char *parameter_string, int *argc, char **argv)
{
int count = 1;
argv[0] = NULL; // the plugin may set it to 'INPUT_PLUGIN_NAME'
if(parameter_string != NULL && strlen(parameter_string) != 0) {
char *arg = NULL, *saveptr = NULL, *token = NULL;
arg = strdup(parameter_string);
if(strchr(arg, ' ') != NULL) {
token = strtok_r(arg, " ", &saveptr);
if(token != NULL) {
argv[count] = strdup(token);
count++;
while((token = strtok_r(NULL, " ", &saveptr)) != NULL) {
argv[count] = strdup(token);
count++;
if(count >= MAX_PLUGIN_ARGUMENTS) {
IPRINT("ERROR: too many arguments to input plugin\n");
return 0;
}
}
}
}
}
*argc = count;
return 1;
}
该函数首先将paramter_string所指向的字符串内容复制到一个新地址,然后在该字符串中寻找每一次空格出现的位置,找完为止。同时在每一次空格出现的位置将原字符串分割,分割后的子字符串存放在argv[]中。其结果为:
argv[0] = NULL;
argv[1] = -d;
argv[2] = /dev/video1
argv[3] = -r;
argv[4] = 320x240;
argv[5] = -f;
argv[6] = 30;
argv[7] = -yuv;
argv[8] = '\0';