L'appel de 'ls' avec execv

Je suis nouveau à des appels système et programmation en C et je travaille sur mon université d'affectation.

Je veux appeler la 'ls' de la commande et imprimer le répertoire.

Ce que j'ai: (j'ai ajouté des commentaires afin que vous puissiez voir ce que je vois venir à travers chaque variable.

int execute( command* cmd ){

  char full_path[50];
  find_fullP(full_path, p_cmd); 
  //find_fullP successfully updates full_path to /bin/ls
  char* args[p_cmd->argc];
  args[0] = p_cmd->name;
  int i;
  for(i = 1; i < p_cmd->argc; i++){
      args[i] = p_cmd->argv[i];
  }

/*
 * this piece of code updates an args variable which holds arguments 
 * (stored in the struct) in case the command is something else that takes 
 * arguments. In this case, it will hold nothing since the command 
 * will be just 'ls'.
 */

  int child_process_status;
  pid_t child_pid;
  pid_t pid;

  child_pid = fork();

  if ( child_pid == 0 ) {
      execv( full_path, args );
      perror("fork child process error condition!" );
  }

  pid = wait( &child_process_status );
  return 0;
}

Je ne suis pas le voir tout ce qui se passe et je suis confus, une idée?

Utilisation opendir, readdir, et closedir au lieu d'utiliser un programme externe
Ajouter les journaux (juste l'impression de stuff est très bien) pour savoir dans quelle mesure vous obtenez et si les variables de contenir les valeurs que vous pensez qu'ils détiennent. Ou utiliser un débogueur.
Votre args tableau doit se terminer par le NULL. Voir man execv
Si l'affectation est à imprimer un répertoire, je m'attends à obtenir les notes les plus élevées.
Pourquoi ne pas changer la représentation de p_cmd->argv[] de sorte que p->cmd_argv[0] est le nom du programme? Ensuite, vous n'avez pas à faire une copie. Vous pouvez l'utiliser argv objet. N'oubliez pas que argv[argc] doit être un pointeur null. La argv pour un programme avec N arguments nécessite N+2 éléments. Un pour le nom du programme, N pour les arguments, et un pointeur null qui se termine le tableau. Si vous n'avez pas terminer le tableau, puis /bin/ls peut trouver un complet ordures pointeur dans argv[1] (donc ls se bloque), ou un pointeur vers les données inutiles (qui ressemble à un fichier qu'il ne trouve pas).

OriginalL'auteur asdf | 2015-02-13