我正在尝试从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);


}
`

最佳答案

char path[40], line[100], *p;
char * prev;

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


prev现在将指向行。因此,当行的内容更改时,更改也将在prev中发生,因为prev指向与行相同的内存

关于c - 通过读取proc/<pid>/status打印状态信息,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36816392/

10-11 22:29