私は、プロセスの詳細を取得する関数を持つスクリプトを作成しようとしています。Read/procプログラム
これまでのところ、私はまだ少しファジーポインタとメモリを見つけています
#include <stdio.h>
#include <string.h>
#include <ctype.h>
char* getField(FILE* file, char* prop, int len){
char line[100], *p;
while(fgets(line, 100, file)) {
if(strncmp(line, prop, len) != 0)
continue;
p = line + len + 1;
while(isspace(*p)) ++p;
break;
}
return p;
}
int main(int argc, char *argv[]) {
char tgid[40], status[40], *s, *n;
FILE* statusf;
printf("Please Enter PID\n");
if (fgets(tgid, sizeof tgid, stdin)) {
//Remove new line
strtok(tgid, "\n");
snprintf(status, 40, "/proc/%s/status", tgid);
statusf = fopen(status, "r");
if(!statusf){
perror("Error");
return 0;
}
s = getField(statusf, "State:", 6);
n = getField(statusf, "Name:", 5);
printf("State: %s\n", s);
printf("Name: %s\n", n);
}else{
printf("Error on input");
}
fclose(statusf);
return 1;
}
を持っています。このスクリプトを実行しないで
私は正しい出力を得ます(例:S - Sleeping)。
しかし、私がプロセス名を取得するために関数を呼び出すとき、私は両方のために同じものを入れているようです。
州:ntary_ctx 名:ntary_ctx
そして、それにも右の名前ではありません。私は問題は、変数がそこに保持している関数でなければならないと思う。しかし、私は、関数が返ってくると、そのメモリがスタックから飛び出すことを考えました。
は、Cプログラムは感謝@rturスクリプト – rtur
ではないことを処理することができ
dest
の大きさで通過するだけのタイトルを変更。私は学ぶべきことがたくさんあります –すべての警告とデバッグ情報( 'gcc -Wall -g')でコンパイルし、デバッガ(' gdb')を使います。 BTW、Cについてもっと読む(例:[here](http://en.cppreference。com/w/c)) 'int 'pidを読み込むために' scanf'を使うことを検討してください。 –