Não usa
system não...
Parece frescura, mas é deselegante pacas.
Faz o seguinte:
1. Cria um array de char* 's, estatica ou dinamicamente, você que sabe; fica mais bonito dinamicamente.
2. Pega a string de comando q cmd recebe, separa cada palavra em um dessas posições do array. Para isso você pode usar a função
strtok, usando como token a string " " (espaço) que tá na biblioteca
string.h, que você já incluiu no seu programa.
Esses passos de cima você pode fazer em uma função separada, até prá ficar mais bonito.
3. Na main, se necessário, usa a chamada de sistema
fork prá criar um novo processo, e
waitpid para o pai esperar a execução do processo-filho.
4. Agora a parte necessária: chame
execvp(args[0], args, NULL) para executar o processo novo.
Se você usar o passo 3, colocar isso dentro de um loop infinito ("while(1)"), e implementar entrada via teclado você já tem um micro-shell