2010-09-18 16 views
0

J'écris un simple shell Unix en C. Voici ce que j'ai jusqu'ici.

#include <stdio.h> 
#include <stdlib.h> 
#include <string.h> 
#include <unistd.h> 

int main() { 
    char x[256], y[256], z[256]; 
    while (1) { 
     getcwd(y, sizeof(y)); 
     printf("%s$ ", y); 
     fgets(x, sizeof(x), stdin); 
     if (x[0] == 'c' && x[1] == 'd' && x[2] == ' ') { 
      sscanf(x, "cd %s", &z); 
      chdir(z); 
     } 
     else if (strcmp(x, "exit\n") == 0) break; 
     else system(x); 
    } 
    return 0; 
} 

Ce que je voudrais faire, c'est rendre le caractère tilde (~) et $ HOME interchangeables. Je me suis dit que je pouvais le faire avec une simple fonction de recherche et remplacement. Est-ce que quelqu'un sait d'une telle chose?

+0

Pour ressembler à un vrai shell, vous ne voulez pas qu'ils soient interchangeables - alors vous ne pourrez pas entrer du tilde du tout. Vous pouvez commencer par remplacer le tilde * non cité * au début du mot par la valeur de $ HOME. –

Répondre

0

Je pense que ce que vous cherchez est strstr(), qui localise une sous-chaîne dans une chaîne, et strchr() qui localise un seul caractère. Lorsque vous avez trouvé l'index de départ, copiez les parties de la chaîne avant et après le ~ dans une nouvelle chaîne.

An implementation of str_replace is included in this question.