Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 通过读取过程打印过程信息/<;pid>/地位_C_Linux_Ubuntu - Fatal编程技术网

C 通过读取过程打印过程信息/<;pid>/地位

C 通过读取过程打印过程信息/<;pid>/地位,c,linux,ubuntu,C,Linux,Ubuntu,我正在尝试从proc//status读取进程信息,我打算首先检查进程是否正在运行,然后如果它正在运行,我将显示它的名称,我将存储以“name:”开头的行在一个名为prev的字符串中,如果进程正在运行,我应该通过这个prev打印它的名称,但发生的情况是prev被另一个值覆盖。我的代码如下:` char path[40], line[100], *p; FILE* statusf; snprintf(path, 40, "/proc/%ld/status", tgid); statusf = f

我正在尝试从proc//status读取进程信息,我打算首先检查进程是否正在运行,然后如果它正在运行,我将显示它的名称,我将存储以“name:”开头的行在一个名为prev的字符串中,如果进程正在运行,我应该通过这个prev打印它的名称,但发生的情况是prev被另一个值覆盖。我的代码如下:`

char path[40], line[100], *p;
FILE* statusf;

snprintf(path, 40, "/proc/%ld/status", tgid);

statusf = fopen(path, "r");
if(!statusf)
    return;

char * prev;

while(fgets(line, 100, statusf)) {
if (strncmp(line,"Name:", 5) == 0){
   prev = line;
   continue;
}

    if(strncmp(line, "State:", 6) == 0){
    // Ignore "State:" and whitespace
    p = line + 7;
    while(isspace(*p)) ++p;
if(p[strlen(p)-1] == '\n'){
    p[strlen(p)-1] = '\0';
}
}

if (!strcmp(p,"R (running)")){
    prev = prev + 6;
    while(isspace(*prev)) ++prev;
if(prev[strlen(prev)-1] == '\n'){
    prev[strlen(prev)-1] = '\0';
}

printf("%s",prev);
}

break;

}
fclose(statusf);
} `


prev现在将指向行。因此,当行的内容发生变化时,这些变化也会出现在prev中,因为prev指向与行相同的内存

您建议怎么做?
char-line[100],prev[100];如果(匹配){strcpy(上一行);}
char path[40], line[100], *p;
char * prev;

while(fgets(line, 100, statusf)) {
if (strncmp(line,"Name:", 5) == 0){
   prev = line;
   continue;
}