Parsing Optimieren

Post Reply
Message
Author
Norb

Parsing Optimieren

#1 Post by Norb »

Hallo zusammen ich will gerne unter linux die Datei in /proc/<pid>/status
parsen die z.b. so aussieht:

Name: init
State: S (sleeping)
Tgid: 1
Pid: 1
PPid: 0
TracerPid: 0
Uid: 0 0 0 0
Gid: 0 0 0 0
FDSize: 32
Groups:
VmSize: 1376 kB
VmLck: 0 kB
VmRSS: 448 kB
VmData: 36 kB
VmStk: 12 kB
VmExe: 24 kB
VmLib: 1276 kB
SigPnd: 0000000000000000
SigBlk: 0000000000000000
SigIgn: ffffffffd7f0d8fc
SigCgt: 00000000280b2603
CapInh: 0000000000000000
CapPrm: 00000000ffffffff


Dazu verwende ich folgenden algorhmus:

C Code:

.
.
.
while((fgets(buffer, BUFFER, file)) != NULL)
{
sscanf(buffer, "Name : %s" , pidStat->comm);
sscanf(buffer, "State: %s" , pidStat->state);
sscanf(buffer, "Uid: %u" , &(pidStat->uid));
sscanf(buffer, "VmSize: %u", &(pidStat->vsize));
sscanf(buffer, "VmRSS: %u" , &(pidStat->rss));
}
.
.
.

Der ist aber ziemlich uneffizient, d.h. verbaucht ziemlich viel CPU zeit.
Kann mir jemand von euch vielleicht bei der Optimierung helfen? Das wäre supernett. Danke schomal im Voraus.

Jochen

Re: Parsing Optimieren

#2 Post by Jochen »

Ich würde "status" gar nicht erst verwenden; die Datei ist als "human-readable" gedacht und daher für Rechner etwas schwerer zu parsen. Verwende stattdessen die Datei "stat". Deren Inhalt wird in "man proc" erläutert. Statt vieler musst Du nur eine Zeile parsen. Allerdings würde ich zur Vorsicht raten: Vom Hörensagen her hat sich das Format verschiedener Einträge unter /proc mit dem 2.6er Kernel geändert - das solltest Du testen.

Jochen

Post Reply