Questione : Edizione di disegno, immagazzinante data da /proc

Ciao, il

This è più per convincere alle certe risposte del mio disegno allora un problema reale per risolvere. Ho pensato che gli dessi una prova poiché tipi siete stato più in anticipo così utile.

Ok qui è. Sto provando a scrivere il programma di corrente alternata ++ che sta andando prendere una fotografia istantanea del filesystem di /proc. Finora ho scritto un analizzatore per analizzare ogni indirizzamento di pid. La fotografia istantanea allora sarà un codice categoria che acclude la struttura del proc che sto provando a progettare.
del

[ProcInfo]  |-----1312--
[di Dir]  |                   |
  |                   |---smap--
[della lima]  |                   |                   |--RSS--
[di dati]  |                   |                   |--USS--
[di dati]  |                   |                   |--PSS--
[di dati]  |                   |---cmdline--
[della lima]  |                   |                    |--cmd--
[di dati]  |                   |---rete--
[di Dir]  |                                  |---sockstat6--
[della lima]  |                                  |                         |--TCP6--
[di dati]  |---meminfo--
[della lima]                         |---memtotal--Il codice categoria del =A del

[ProcInfo] [di dati] che rappresenta il proc che dovrebbe ereditare il codice categoria virtuale del =A del class
[Dir] di fotografia istantanea che rappresenta un dir nel proc che dovrebbe ereditare il codice categoria virtuale del =A del class
[lima] di fotografia istantanea che rappresenta una lima nel proc che dovrebbe ereditare il codice categoria virtuale del =A del class
[dati] di fotografia istantanea rappresentando i dati quei il
{vuoto virtuale di fotografia istantanea di analizzatore returns.

class del
aggiunge (Snapshot*) = 0;
};

class Dir : Snapshot
{
del
del
……….
riservato:
std: map;
}; lima del

class: Snapshot
{
del
del
……….
riservato:
std: map;
};


class ProcInfo : Dir
{
del
…….
}; il

I allora vorrebbe utilizzare questo in un filetto fa funzionare ogni sec 10 e la presa della fotografia istantanea del proc del

ProcHandler di /ptoc; *procInfo del
ProcInfo = proc.snapshot (); pidSnapshot del

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

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

delete procInfo;le osservazioni del

Any su questo disegno sarebbero persino piccole quelle che molto apprezzate dovessi appena ottenere alcuno retroagissi. Sto fissando a questo disegno a lungamente e penso che abbia bloccato mio auto dentro a questo il disegno. Ho bisogno di alcuni nuovi occhi di dare un'occhiata esso e forse possono vedere alcuni problemi o forse un design.


class= del

Risposta : Edizione di disegno, immagazzinante data da /proc


Sembra giusto a me, ma poiché avete chiesto le nuove idee, qui va --

- Poichè un aspetto di di preferenza/gusto io molto piuttosto avrebbe mantenuto i non soci di conversioni come, in modo da non devo inquinare l'interfaccia e non lascio alcuna nuova conversione aggiungermi facilmente al sistema. Ma ho detto, quello è un aspetto del gusto forse.

Convertito (dati d);
Convertito (d);

- Da voi ha parlato dei viaggi e della larghezza di banda di minimizzazione dell'assistente e casualmente ha usato la frase “di fotografia istantanea„, esso è naturale da pensare anche “alle fotografie istantanee differenziali„. Così l'idea è che prendete una fotografia istantanea primaria.

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

Fotografia istantanea:: differenza ();
Fotografia istantanea:: applyDifferential (Snapshot* d)

In modo che senso, soltanto valori che hanno cambiamento poiché l'ultimo bloccaggio sarà restituito e che possono causare il risparmio enorme in termini di prestazione.

- Siete sicuro il filesystem del proc non avete collegamenti simbolici (significo la stessa entità che compare sotto gli alveari multipli)? Se sì, allora è giusta mantenere due copie dello stesso riferimento. Indovino che non importa molto, finchè un oggetto di valore della fotografia istantanea appena.

- Piuttosto che avendo il genere di accessors molto specifici, del getPid () ecc sarebbe più utile se poteste avere nel codice categoria che basso un insieme generico dei metodi del ritrovamento () come dice

fotografia istantanea virtuale di Snapshot*:: ritrovamento (bambino della stringa) {
}

Inoltre come circa la base di fotografia istantanea che ha bambini

codice categoria SnapshotContainer: fotografia istantanea pubblica
{
fotografia istantanea virtuale di Snapshot*:: ritrovamento (bambino della stringa) {
}
riservato:
  std: *mpData del programma;
};

- Essere utile, se inoltre fornite una leggera ma variazione importante per il ritrovamento (), lo denominano individuano () il quel prende un percorso (piuttosto che un nome) e fa il lavoro sporco di fare l'attraversamento.

il percorso di // è in questa forma, /root/net/sockstats/tcpip6
Fotografia istantanea di Snapshot*:: individuare (percorso della stringa) {
}

- Il cambiamento più importante che avrei fatto sarebbe di rendere alla fotografia istantanea un oggetto contato riferimento e rinviato un astuto/refptr alla fotografia istantanea piuttosto che gli indicatori grezzi. Quello realmente dà molto potere, particolarmente quando volete potere andare a prendere i bambini e mantenerli intorno (forse)

fotografia istantanea del codice categoria: RefCounted pubblico // vede Poco:: RefCounted per il rif.
{
}

typedef RefCountedPtr RefSnapshot;

Sperare questo l'aiuto…
Altre soluzioni  
 
programming4us programming4us