c 언어를 사용하여 쉘 프로그램에 대한 히스토리 명령 작성

user3340449

내가하고 싶은 것은 쉘 프로그램에서 히스토리 명령을 개발하는 것입니다. 따라서 사용자가 이력을 쓸 때마다 마지막으로 입력 한 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 memory\n");

    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: %s\n", n, cmdsHistory[n]);
        }
    }

그런 다음 사용자가 기록을 쓸 때마다 cmdsHistory를 반복하고 결과를 인쇄합니다.

* 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시작할 때 모든 포인터를 초기화해야합니다 .

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

C ++ 프로그램을 컴파일 할 때 바이너리를 바이너리 디렉토리에 넣도록 쉘 스크립트를 작성하는 방법

분류에서Dev

Linux 시스템에서 프로그램 또는 bash 쉘 명령이 정확히 어떻게 작동합니까?

분류에서Dev

`history -c`를 사용하여 히스토리를 지우는데 왜 첫 번째 명령 ID가`1`로 시작하지 않습니까?

분류에서Dev

히스토리를 사용하여 명령이 실행 된 시간에 대한 타임 스탬프를 어떻게 볼 수 있습니까?

분류에서Dev

'매직 스페이스'를 사용하는 명령에 대해 자동 히스토리 확장을 활성화하려면 어떻게해야합니까?

분류에서Dev

쉘 명령에 변수를 입력하기위한 매크로 작성

분류에서Dev

Haskell에서 명령형 언어에 대한 통역사 작성

분류에서Dev

다른 프로그램에 대해 올바르게 인용 된 명령 줄 인수를 생성하는 프로그램을 어떻게 작성합니까?

분류에서Dev

히스토리에 추가하지 않고 쉘 명령을 어떻게 실행할 수 있습니까?

분류에서Dev

Ubuntu, 쉘 스크립트를 사용하여 C 프로그램 반복

분류에서Dev

Visual Studio devolopers 명령 프롬프트를 사용하여 여러 소스 파일 프로그램 C ++ 컴파일

분류에서Dev

Linux 용 C로 쉘을 작성하고 특정 프로세스에 대한 exec는 무한 루프

분류에서Dev

쉘 스크립트를 사용하여 C 프로그램에 입력을 보내는 방법

분류에서Dev

쉘 스크립트를 사용하여 쉘 명령 실행

분류에서Dev

newusers 명령에 대한 ID를 추가하는 쉘 스크립트

분류에서Dev

C 프로그램에서 쉘 명령을 실행하는 방법

분류에서Dev

--rcfile 및 -c를 사용하여 새 bash 쉘에서 명령 실행

분류에서Dev

쉘 히스토리 (zsh)에 보관하지 않고 명령 블록 실행

분류에서Dev

mkdir 및 변수가있는 쉘 스크립트를 사용하여 한 번에 여러 디렉토리 생성

분류에서Dev

어떤 상황에서 사용자가 쉘이 자신의 명령을 히스토리에 기록하지 못하게할까요?

분류에서Dev

이스케이프를 사용하여 bash 스크립트에서 프로그램으로 명령 줄 인수를 그대로 전달합니다.

분류에서Dev

파이프를 사용하여 동일한 프로세스에서 여러 쉘 명령을 실행할 때 교착 상태 읽기

분류에서Dev

python matplotlib를 사용하여 정규 분포에 대한 히스토그램을 어떻게 그리나요?

분류에서Dev

Linux 명령 줄에서 인덱스 파일을 검색하는 C ++ 프로그램 작성

분류에서Dev

파일 작업. fork () execvp (), wait / waitpid ()를 사용하여 단일 명령 줄 인수를받는 c 프로그램

분류에서Dev

C 프로그램에서 execl을 사용하여 쉘 스크립트 실행

분류에서Dev

tr 명령을 사용하여 쉘에서 정확한 단어를 다른 단어로 바꿉니다.

분류에서Dev

쉘 명령 "top"은 / proc 디렉토리에서 어떤 프로세스를 보여줍니까?

분류에서Dev

성공적인 서브 쉘 명령에 대한 Bash 테스트가 false를 리턴 함

Related 관련 기사

  1. 1

    C ++ 프로그램을 컴파일 할 때 바이너리를 바이너리 디렉토리에 넣도록 쉘 스크립트를 작성하는 방법

  2. 2

    Linux 시스템에서 프로그램 또는 bash 쉘 명령이 정확히 어떻게 작동합니까?

  3. 3

    `history -c`를 사용하여 히스토리를 지우는데 왜 첫 번째 명령 ID가`1`로 시작하지 않습니까?

  4. 4

    히스토리를 사용하여 명령이 실행 된 시간에 대한 타임 스탬프를 어떻게 볼 수 있습니까?

  5. 5

    '매직 스페이스'를 사용하는 명령에 대해 자동 히스토리 확장을 활성화하려면 어떻게해야합니까?

  6. 6

    쉘 명령에 변수를 입력하기위한 매크로 작성

  7. 7

    Haskell에서 명령형 언어에 대한 통역사 작성

  8. 8

    다른 프로그램에 대해 올바르게 인용 된 명령 줄 인수를 생성하는 프로그램을 어떻게 작성합니까?

  9. 9

    히스토리에 추가하지 않고 쉘 명령을 어떻게 실행할 수 있습니까?

  10. 10

    Ubuntu, 쉘 스크립트를 사용하여 C 프로그램 반복

  11. 11

    Visual Studio devolopers 명령 프롬프트를 사용하여 여러 소스 파일 프로그램 C ++ 컴파일

  12. 12

    Linux 용 C로 쉘을 작성하고 특정 프로세스에 대한 exec는 무한 루프

  13. 13

    쉘 스크립트를 사용하여 C 프로그램에 입력을 보내는 방법

  14. 14

    쉘 스크립트를 사용하여 쉘 명령 실행

  15. 15

    newusers 명령에 대한 ID를 추가하는 쉘 스크립트

  16. 16

    C 프로그램에서 쉘 명령을 실행하는 방법

  17. 17

    --rcfile 및 -c를 사용하여 새 bash 쉘에서 명령 실행

  18. 18

    쉘 히스토리 (zsh)에 보관하지 않고 명령 블록 실행

  19. 19

    mkdir 및 변수가있는 쉘 스크립트를 사용하여 한 번에 여러 디렉토리 생성

  20. 20

    어떤 상황에서 사용자가 쉘이 자신의 명령을 히스토리에 기록하지 못하게할까요?

  21. 21

    이스케이프를 사용하여 bash 스크립트에서 프로그램으로 명령 줄 인수를 그대로 전달합니다.

  22. 22

    파이프를 사용하여 동일한 프로세스에서 여러 쉘 명령을 실행할 때 교착 상태 읽기

  23. 23

    python matplotlib를 사용하여 정규 분포에 대한 히스토그램을 어떻게 그리나요?

  24. 24

    Linux 명령 줄에서 인덱스 파일을 검색하는 C ++ 프로그램 작성

  25. 25

    파일 작업. fork () execvp (), wait / waitpid ()를 사용하여 단일 명령 줄 인수를받는 c 프로그램

  26. 26

    C 프로그램에서 execl을 사용하여 쉘 스크립트 실행

  27. 27

    tr 명령을 사용하여 쉘에서 정확한 단어를 다른 단어로 바꿉니다.

  28. 28

    쉘 명령 "top"은 / proc 디렉토리에서 어떤 프로세스를 보여줍니까?

  29. 29

    성공적인 서브 쉘 명령에 대한 Bash 테스트가 false를 리턴 함

뜨겁다태그

보관