2013-04-02 43 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 ...的转换方式,但它们有点...很难... –