Frage : Die Entwurfsausgabe, speichernd r5uhren von /proc her

Hallo, ist

This mehr, zum etwas Rückgespräch meines Entwurfs dann eines tatsächlichen Probleme zu erhalten, um zu lösen. Ich dachte, dass ich ihm einen Versuch geben würde, da Sie Kerle so nützliches früheres gewesen sind.

Ok hier ist er. Ich versuche, Programm Wechselstrom-++ zu schreiben, das einen Schnappschuß des /proc-Dateisystems nehmen wird. Bis jetzt habe ich eine grammatische Definition geschrieben, um jede pid-Richtlinie zu analysieren. Der Schnappschuß ist dann eine Kategorie, welche die proc Struktur einschließt, die ich versuche, zu entwerfen.

[ProcInfo]
  |-----1312--[Dir]
  |                   |
  |                   |---smap--[Akte]
  |                   |                   |--RSS--[Daten]
  |                   |                   |--USS--[Daten]
  |                   |                   |--PSS--[Daten]
  |                   |---cmdline--[Akte]
  |                   |                    |--cmd--[Daten]
  |                   |---Netz--[Dir]
  |                                  |---sockstat6--[Akte]
  |                                  |                         |--TCP6--[Daten]
  |---meminfo--[Akte]
                         |---memtotal--[Die Daten]

[ProcInfo] =A Kategorie, die proc darstellt, das die virtuelle Schnappschuß class
[Dir] =A Kategorie übernehmen sollte, die ein dir im proc darstellt, das die virtuelle Schnappschuß class
[Akte] =A Kategorie übernehmen sollte, die eine Akte im proc darstellt, das die virtuelle Schnappschuß class
[Daten] =A Kategorie übernehmen sollte, die diese Daten darstellend das grammatische Definition returns.

class Schnappschuß
{
virtuelle Lücke, fügen (Snapshot*) = 0 hinzu;
};

class Dir : allgemeines Snapshot
{


….
privat:
Geschlechtskrankheit: map *mpData;
};

class Akte: allgemeines Snapshot
{


….
privat:
Geschlechtskrankheit: map *mpData;
};


class ProcInfo : allgemeines Dir
{

….
};

I möchte dann dieses in einem Gewinde verwenden laufen lassen alle sek 10 und das Nehmen eines Schnappschusses von /ptoc

ProcHandler proc;
ProcInfo *procInfo = proc.snapshot ();

Dir pidSnapshot = procInfo->getPid (1312);
Data Daten = pidSnapshot.get (ProcInfo:: RSS);
int rss = data.toInt ();
string sRss = data.toString ();

File memSnapshot = procInfo->getSystem (ProcInfo:: MEM);
Data Daten = memSnapshot.get (ProcInfo:: MEMTOTAL);
int mem = data.toInt ();
string sMem = data.toString ();

delete procInfo;

Any Anmerkungen zu diesem Entwurf würden viel geschätzte sogar kleine sein, die ich gerade einiges erhalten muss rückwirke. Ich habe entlang dieses Entwurfs zu lang angestarrt und ich denke, dass ich mein Selbst innen zu diesem der Entwurf verriegelt habe. Ich benötige einige neue Augen, einen Blick an ihm zu nehmen und möglicherweise können sie einige Probleme oder möglicherweise ein viel besseres design.


sehen

Antwort : Die Entwurfsausgabe, speichernd r5uhren von /proc her


Scheint zu mir, aber okay, da Sie um neue Ideen baten, geht hier --

- Da eine Angelegenheit von vorzugsweise/Geschmack ich viel eher die Umwandlungsnichtmitglieder halten würde, wie, also ich die Schnittstelle beschmutzen muss und keine neue Umwandlung dem System leicht hinzugefügt werden lasse. Aber, wie ich sagte, ist die eine Angelegenheit des Geschmacks möglicherweise.

Bekehrter (Daten d);
Bekehrter (d);

- Seit Ihnen sprach über herabsetzenbedienerreisen und -bandbreite und verwendete zusammentreffend die „Schnappschuß“ Phrase, es ist natürlich, an „differenziale Schnappschüsse“ auch zu denken. So ist die Idee, dass Sie einen Primärschnappschuß nehmen.

Dir pidSnapshot = procInfo->getPid (1312);
SnapShot* Unterschied = pidSnapshot->difference ();

Schnappschuß:: Unterschied ();
Schnappschuß:: applyDifferential (Snapshot* d)

Damit Weise, nur Werte, die Änderung haben, da letzte Sicherung zurückgebracht wird und die sehr große Sparungen in Leistung ausgedrückt verursachen können.

- Sind Sie das proc Dateisystem haben nicht symbolische Verbindungen sicher (mich bedeute das gleiche Wesen, das unter mehrfachen Bienenstöcken erscheint)? Wenn ja, ist dann es okay, zwei Kopien des gleichen Datums zu halten. Ich schätze, dass es nicht viel, solange ein Wertgegenstand des Schnappschusses gerade ausmacht.

- Eher als, die getPid () usw. Art der sehr spezifischen Accessors, würde es habend lohnender sein, wenn Sie in der niedrigen Kategorie haben konnten, die ein generischer Satz Methoden der Entdeckung () wie sagen

virtueller Snapshot* Schnappschuß:: Entdeckung (Schnurkind) {
}

Auch wie über Schnappschußunterseite, die Kinder hat

Kategorie SnapshotContainer: allgemeiner Schnappschuß
{
virtueller Snapshot* Schnappschuß:: Entdeckung (Schnurkind) {
}
privat:
  Geschlechtskrankheit: Diagramm *mpData;
};

- Nützlich sein, wenn Sie auch eine geringfügige aber wichtige Veränderung für Entdeckung () zur Verfügung stellen, benennen sie lokalisieren () dieses nimmt einen Weg (eher als ein Name) und erledigt die schmutzige Arbeit des Handelns der Überquerung.

//-Weg ist in dieser Form, /root/net/sockstats/tcpip6
Snapshot* Schnappschuß:: finden (Schnurweg) {
}

- Die wichtigste Änderung, die ich vornehmen würde, würde, den Schnappschuß einen Hinweis gezählten Gegenstand zu bilden und zurückgegangen ein intelligentes/einem refptr zum Schnappschuß eher als rohe Zeiger sein. Das geben wirklich viel Energie, besonders wenn Sie sein möchten, Kinder zu holen und sie um zu halten (möglicherweise)

Kategorie Schnappschuß: allgemeines RefCounted // sehen Poco:: RefCounted für Verweis.
{
}

typedef RefCountedPtr RefSnapshot;

Dieses Hilfe hoffen…
Weitere Lösungen  
 
programming4us programming4us