2016-04-23 12 views
-1

proc // statusからプロセス情報を読み込もうとしていますが、プロセスが実行中であるかどうかを確認するつもりです。私は "名前:"で始まる行をprevという文字列に保存します。プロセスが実行されている場合、このprevで名前を表示する必要がありますが、prevは別の値で上書きされます。私のコードは `プロセス情報の読み込みproc/<pid> /ステータス

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); 

} `

答えて

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

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

prevは今すぐ行を指します。ラインの内容が変化すると、前のバージョンと同じメモリを指しているので、変更は前のバージョンと同じように表示されます

+0

何をお勧めしますか? – Joey12

+0

'char line [100]、prev [100]; if(match){strcpy(prev、line);} ' –

関連する問題