2013-04-02 78 views
-2

我的問題是我覺得很奇怪。實際上,我列出了給定進程的所有子進程。無符號長不包含有效值

對此,我使用:How to find all child processes?和RC的回答。

但是,我需要一個無符號長出口。 而解決方案給一些字符串基於一個char[]

如果我想得到unsigned long,我需要修改代碼來獲取只有數字值。另一種情況將不正確。

所以我把char作爲unsigned 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

我想的是兩種方法可以做到這一點:

  • 首先,使用unsigned long代替char[]
  • 其次,在讀取文件後,將char[]轉換爲unsigned long。但是,我需要逐行讀取它。 popen有可能嗎?
+0

你有一個錯誤你的代碼。 –

+3

顯然你的代碼是錯誤的。由於你沒有顯示你的代碼,你正在做不必要的努力。建議的話:不要隱藏細節。 –

+0

好吧,我加入它! –

回答

1

所以我把charunsigned long。然後,scanf()%ld標籤。

在這裏,你的程序調用未定義的行爲,因爲對於unsigned long類型說明符爲%lu

(也許還有一些其他的,不可能換我們到告訴錯誤,以及在你的代碼;從char *改變返回值來unsigned long是什麼,但微不足道。)

+0

有沒有一種方法可以將char []轉換爲無符號長整型,比帶字節轉換的長整型體更簡單? 我可以用popen打開一個文件並逐行閱讀嗎? –

+0

@MikeTelson現在這兩個人是如何相關的? – 2013-04-02 13:51:54

+0

那麼,如果第一種方式不起作用,我需要一個B計劃......這是爲了從char []獲取無符號長整型,我已經有一個工作解決方案,輸出爲char []。我看到了從char []到unsigned ...的轉換方式,但它們有點...很難... –