我的目标是让用户查看输入命令的历史记录(historyArray-完成),并允许他通过输入history 1history 2(其中12是从historyArray打印出的命令列表的编号。
我设法从用户​​输入的第二个参数(history 1)获得索引。现在我的问题是,如何执行从history N获得的特定命令?

因此,例如:

     hshell> test [Enter]
     Command not found
     hshell> history 1
     Command not found


这是我的进度:

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

int main (int argc, char *argv[])
{
    int i=0; int j=0; int k=0;
    int elementCounter = 0;
    char inputString[100];
    char *result=NULL;
    char delims[] = " ";
    char historyArray[30][20] = {0};
    char tokenArray[20][20] ;
    int tempIndex = 0;
    char hCommand[2][20]={0};

    do
    {
             j = 0;
             printf("hshell>");
             gets(inputString);

             strcpy (historyArray[k], inputString);
             k = (k+1) % 20;

            if (elementCounter <= 20)
             {
              elementCounter++;
             }

             if (elementCounter == 21)
             {
                k = 20;
                for (i=0; i<20; i++)
                {
                    strcpy(historyArray[i], historyArray[i+1]);
                }
                 strcpy (historyArray[19], inputString);
             }

             // Break the string into parts
             result = strtok(inputString, delims);


             while (result!=NULL)
             {
                  strcpy(tokenArray[j], result);
                   j++;
                  result= strtok(NULL, delims);
             }

              if (strcmp(tokenArray[0], "exit") == 0)
              {
                 return 0;
              }
              else if (strcmp(tokenArray[0], "history") ==  0)
              {
                   if (j>1)
                   {
                      tempIndex = atoi(tokenArray[1]);
                     strcpy(hCommand,historyArray[tempIndex-1]);
                     puts(hCommand);
                    // tempIndex = atoi(tokenArray[j]);
                     //puts(tempIndex);
                   }
                   else
                   {
                       //print history array
                       for (i=0; i<elementCounter-1;i++)
                           printf("%i. %s\n", i+1, historyArray[i]);
                   }
              }
              else
              {
                  printf("Command not found\n");
              }



    }while (1);
}



hCommand是我从historyArray获取的命令存储位置。
我正在使用Windows计算机。

最佳答案

您可以在stdlib.h中使用“系统”功能。

#include <stdlib.h>
int system(const char *command);


Windows和* nix均包含此功能。您无需担心分别调用forkCreateProcess的麻烦,这将为您解决。有关详细信息,请参见MSDN documentation

在您的代码中,您将编写:

system(hCommand);


命令完成时它将返回(这是一个同步调用)。

10-04 13:22