2013-04-02 5 views
-2

제 질문은 내가 아주 이상하다고 생각하는 것입니다. 사실, 나는 주어진 프로세스의 모든 하위 프로세스를 나열하고있다.부호없는 Long에 유효한 값이 포함되어 있지 않습니다.

이 경우, 나는 How to find all child processes? 및 RC의 대답을 사용합니다.

하지만 unsigned long을 사용하는 exit가 필요합니다. 그리고 해결책은 char[]을 기반으로 문자열을 제공합니다.

숫자를 얻으려면 코드를 수정해야합니다. 다른 경우는 정확하지 않습니다.

그래서 charunsigned long으로 입력했습니다. 그런 다음 scanf%ld 태그가 포함되어 있습니다.

하지만 쓰레기를 받고 있어요 ...

왜 작동하지 않습니다?

편집 : 코드 :

const char *name = "top"; 
char command[100]; 
unsigned long parentID; unsigned long processID; 

strcpy(command, "ps -C "); strcat(command, name); strcat(command, " --format '%P %p'"); 

FILE *fp = popen(command, "r"); 
    if (fp == NULL) fprintf(stderr, "Error in reading PID child processes information !\n"); 

while(fscanf(fp, "%lu %lu", parentID, processID) != EOF) { 
    printf("PID : %lu Parent : %lu \n", processID, parentID); 
} 

return processID; 

, %schar[256],이 작품!

편집 : Toughts

나는이 두 가지 방법을 생각했다 :

  • 첫째, 대신 char[]unsigned long를 사용하여.
  • 두 번째로 파일을 읽은 후에 char[]에서 unsigned long으로 변환하십시오. 그러나 한 줄씩 읽어야합니다. popen으로 가능합니까?
+0

당신은 오류가있다 당신의 코드. –

+3

분명히 코드가 잘못되었습니다. 코드를 보여주지 않았으므로 불필요하게 어렵게 만듭니다. 조언의 말씀 : 세부 사항을 숨기지 마십시오. –

+0

오케이, 추가하겠습니다! –

답변

1

그래서 unsigned longchar을 넣었습니다. 그런 다음 scanf()%ld 태그가 포함되어 있습니다.

unsigned long의 형식 지정자가 %lu이므로 여기에서 프로그램이 정의되지 않은 동작을 호출합니다.

(그리고 아마도 거기에 다른 코드에서뿐만 아니라 오류를 불가능를 위해 우리 - 투 - 이야기, 사소한 아무것도하지만입니다 unsigned longchar *에서 반환 값을 변경.)

+0

char []을 바이트 이동이있는 것보다 단순한 부호없는 long으로 변환하는 방법이 있습니까? 파일을 popen으로 열고 한 줄씩 읽을 수 있습니까? –

+0

@MikeTelson 이제 그 두 가지는 어떻게 관련되어 있습니까? –

+0

첫 번째 방법이 작동하지 않으면 B 계획이 필요합니다 ... char []에서 부호없는 long을 가져 오는 것입니다. 이미 char []로 출력 된 작업 솔루션이 있습니다. char []에서 unsigned로 변환하는 방법을 보았습니다 ...하지만 조금 어렵습니다 ... –

관련 문제