使用 c 语言为 shell 程序创建历史记录命令



我想做的是在我的shell程序中开发一个history命令。因此,每当用户写入历史记录时,输入的最后 10 个命令都会显示在屏幕上

这是我的代码段。

  int i;
  char cmd[4096];
  int cmdHisC =0; 
  char *cmdHistory;
  char *cmdsHistory[10];

      while(1) {
    /*** Read input from shell ***/
        fgets(cmd,4096,stdin);
if(strcmp(cmd,"") != 0)
{
    if((cmdHistory= strdup(cmd)) != NULL)
    {
        if (cmdsHistory[cmdHisC] != NULL) 
        free(cmdsHistory[cmdHisC]);
        cmdsHistory[cmdHisC] = cmdHistory;
        cmdHisC++;
    }       
    else
    fprintf(stderr, "Error, Cannot save this command in the history pointer: Out of memoryn");
    if(cmdHisC>9)
        cmdHisC=0;
}

打印历史记录我的意思是cmdsHistory,这是代码:

 if(strcmp(argsCmd[0], "history")==0)
    {
       for(int n = 0; n<10 ; n++) 
        {
        if(cmdsHistory[n] != NULL)
        printf("History command  %d: %sn", n, cmdsHistory[n]);
        }
    }

然后,每当用户写入历史记录时,我都会遍历cmds历史记录并打印结果。

我无法将 *cmdHistory(用户输入的 sets 命令)放入 **cmdsHistory 数组的问题。

请帮忙吗?

一个修复程序是改变

char **cmdsHistory;

char *cmdsHistory[10]; //or any desire number/macro

但是,您的程序仍然会通过调用strdup并在一个循环后重置i as 0来泄漏内存。不过请修复它。

修复泄漏就像

if (cmdsHistory[cmdHisC]) {
    free(cmdsHistory[cmdHisC]);
    cmdsHistory[cmdHisC] = cmdHistory;
}

确保初始化所有指针以在启动时NULL

相关内容

  • 没有找到相关文章

最新更新