2012-10-26 16 views
2

C로 프로그램을 작성하려고합니다 (Linux 64 비트에서 GCC 4.1.2 사용).C 프로그램 종료

int program_instances(char *cmdname) 
{ 
    char buf[32], *ret; 
    char cmdbuf[512]; 
    FILE *cmdpipe; 

    sprintf(cmdbuf, "/bin/ps -eo comm | /bin/grep -c '%s'", 
     cmdname); 
    cmdpipe = popen(cmdbuf, "r"); 

    if (!cmdpipe) 
    { 
     return -1; 
    } 

    memset(buf, 0, sizeof(buf)); 
    ret = fgets(buf, sizeof(buf), cmdpipe); 
    pclose(cmdpipe); 

    if (!ret) 
    { 
     return -1; 
    } 

    int nr = atoi(buf); 
    return nr; 
} 

가 .. gdb를 통해하지만 라인

sprintf(cmdbuf, "/bin/ps -eo comm | /bin/grep -c '%'",cmdname); 

을 programm는 아래 라인을 던지고, 위의 선을 넘어되지 후 문제를 디버깅하는 시도

 
Executing new program: /bin/bash 
Error in re-setting breakpoint 1: No symbol table is loaded. Use the "file" command. 
[New process 2437] 
Executing new program: /bin/ps 

우리를 도와주세요 이 문제를 해결하십시오.

+0

cmdname의 시간은 얼마입니까? cmdbuf 끝에서 전속력을 발휘할 수도 있습니다. –

+0

"*이 문제를 해결하는 데 도움주세요 *"- 어떤 문제가 있습니까? GDB의 응답 또는 메시지? –

+0

이것은 C입니다. C++이 아니기 때문에 태그를 추가하면 더 빨리 답변을 얻을 수 있습니다. – 111111

답변

3

코드를 -g로 컴파일하고 -O [컴파일러 플래그]를 제거하십시오. 컴파일러 (gcc)를 최적화하면 명령 순서가 변경되어 속도가 향상됩니다. 첨부 디버거를 다시 컴파일 한 후.

+0

-G는 인식 할 수없는 옵션입니다. – user1774057

+0

죄송합니다. '-g'라는 뜻의 죄송합니다. 게시물 –

+0

을 사용했는데 같은 오류가 발생했습니다. – user1774057