The GNU C Library - Wordexp Example

Node: Wordexp Example Prev: Flags for Wordexp Up: Word Expansion

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; args[i]; i++)
	    {
	      if (wordexp (options, &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;
	}

In practice, since wordexp is executed by running a subshell, it would be faster to do this by concatenating the strings with spaces between them and running that as a shell command using `sh -c'.


Up: Word Expansion