-2

我的问题是我觉得很奇怪的事情。事实上,我列出了给定进程的所有子进程。

为此,我使用:如何查找所有子进程?和RC的回答。

但是,我需要一个无符号长的出口。并且解决方案给出了一些基于a的字符串char[]

如果我想获取unsigned long,我需要修改代码以仅获取数值。另一种情况将不正确。

所以我把charas 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;

有了,%s并且char[256],这项工作!

编辑:想法

我正在考虑两种方法来做到这一点:

  • 首先,使用unsigned long代替char[].
  • 二、读取文件后转换char[]为。unsigned long但是,我需要逐行阅读。有可能popen吗?
4

1 回答 1

1

所以我把charas unsigned long. 然后,scanf()带有%ld标签。

在这里,您的程序会调用未定义的行为,因为类型说明符为unsigned longis %lu

(而且您的代码中可能还有一些其他的、我们无法说出的错误;将返回值从char *to更改unsigned long绝不是微不足道的。)

于 2013-04-02T13:30:43.973 回答