Wordexp Example (The GNU C Library)

Next: , Previous: , Up: Shell-Style Word Expansion [Contents][Index]


10.4.4 wordexp Example

Here is an example of using wordexp to expand several strings and use the results to run a shell command. It also shows the use of WRDE_APPEND to concatenate the expansions and of wordfree to free the space allocated by wordexp.

int
expand_and_execute (const char *program, const char **options)
{
 wordexp_t result;
 pid_t pid
 int status, i;
 /* Expand the string for the program to run. */
 switch (wordexp (program, &result, 0))
 {
 case 0:			/* Successful. */
 break;
 case WRDE_NOSPACE:
 /* If the error was WRDE_NOSPACE,
 then perhaps part of the result was allocated. */
 wordfree (&result);
 default: /* Some other error. */
 return -1;
 }
 /* Expand the strings specified for the arguments. */
 for (i = 0; options[i] != NULL; i++)
 {
 if (wordexp (options[i], &result, WRDE_APPEND))
 {
 wordfree (&result);
 return -1;
 }
 }
 pid = fork ();
 if (pid == 0)
 {
 /* This is the child process. Execute the command. */
 execv (result.we_wordv[0], result.we_wordv);
 exit (EXIT_FAILURE);
 }
 else if (pid < 0)
 /* The fork failed. Report failure. */
 status = -1;
 else
 /* This is the parent process. Wait for the child to complete. */
 if (waitpid (pid, &status, 0) != pid)
 status = -1;
 wordfree (&result);
 return status;
}

AltStyle によって変換されたページ (->オリジナル) /