Prosíme přihlašte se nebo zaregistrujte.

Přihlašte se svým uživatelským jménem a heslem.
Vaše pomoc je stále potřeba!

Autor Téma: systemove informace C/C++  (Přečteno 1983 krát)

mizik

  • Návštěvník
  • Příspěvků: 72
    • mizici.com
systemove informace C/C++
« kdy: 30 Července 2009, 17:35:05 »
Ahoj,
v C++ delam tridu ktera bude v sobe drzet informace o cpu, pameti, disku, eth....
Vyskytlo se mi par otazek, ktere jsem nikde nevy-googloval.

1) jak zjistim maximalni pocet pameti kterou si muze jeden process alokovat? Vygoogloval jsem ze pro 32bit to je mezi 2-4GB zalezi na nastaveni. Tj prepokladam ze to bude jako promenna ulozene nekde v /proc ci /proc/sys/kern ci /proc/sys/fs ale nenasel jsem to zde. - mozna to chce jen lepsi bryle  ;)

Vim, ze pro aktualni process najdu info v /proc/self, ale tuto informaci jsem tam nenasel(predpokladam ze jde o nastaveni takze bude jinde)?

2)potrebuju zjistit informace o disku a to pocet bytes per sector a sectors per cluster. Zase nejlepe, aby to byla nejaka fce kernelu ci nekde v /proc
v /proc/sys/fs jsem to nenasel, ani v /proc/partitions ci /proc/mounts
existuje funkce statvfs viz http://linux.die.net/man/2/statvfs ,statfs,stat ale pokud se nepletu, tak z techto informaci to nedostanu..(mozna nejak dopocitat?)


vysledny programek se nebude spoustet pod uzivatelem root, takze napr. do nekterych systemovych logu se nedostanu


Predem dik za odpoved, linky ci cokoliv uzitecneho.
« Poslední změna: 30 Července 2009, 18:16:05 od mizik »

nettezzaumana

  • Host
Re: systemove informace C/C++
« Odpověď #1 kdy: 04 Srpna 2009, 00:28:57 »
ad.mem) zkus (size_t)-1, pokud to neprojde, hod to napolivic & etc ..

mizik

  • Návštěvník
  • Příspěvků: 72
    • mizici.com
Re: systemove informace C/C++
« Odpověď #2 kdy: 04 Srpna 2009, 13:28:58 »
Jasne ze to co pises sice funguje, ale nevraci to to co chci.  :(

  To je to same jako bys udelal UINT (-1) tak ti to hodi sama 0xFF. Tim jen zjistis velikost (tj. bud maximum prvek coz je pro 32bit 4GB nebo unsigned nebo ti to vrati -1 u signed cisla)  A jelikoz je size_t definovan jako unsigned int(pro 32bit, pro 64bit to je unsigned long) tak dostanu rovnou maximalni moznou velikost pameti, coz nemusi korespondovat s maximalni velikosti pameti pro process

Nejaky jiny napad?

nettezzaumana

  • Host
Re: systemove informace C/C++
« Odpověď #3 kdy: 04 Srpna 2009, 14:09:53 »

Nejaky jiny napad?
!google :: http://lists.samba.org/archive/linux/2005-November/014547.html

ad.1) thread jsem neprocital, ale afaik neni v systemu by default nejakej zamek kterej by nedovoloval sezrat vic pameti nez nejake $x

mizik

  • Návštěvník
  • Příspěvků: 72
    • mizici.com
Re: systemove informace C/C++
« Odpověď #4 kdy: 04 Srpna 2009, 17:16:15 »
no to jsem zminoval hned na poprve  ;) : Vygoogloval jsem ze pro 32bit to je mezi 2-4GB zalezi na nastaveni.
Presne tento forum (mail server) jsem cetl. Zminujou se tam o setrlimit. Tim se nastavi dany limit napr pro pamet. Pote se ziska getrlimit. Standartne je unlimited viz :
Kód: [Vybrat]
mizik@pc:~$ ulimit -a
core file size          (blocks, -c) 0
data seg size           (kbytes, -d) unlimited
max nice                        (-e) 0
file size               (blocks, -f) unlimited
pending signals                 (-i) unlimited
max locked memory       (kbytes, -l) unlimited
max memory size         (kbytes, -m) unlimited
open files                      (-n) 1024
pipe size            (512 bytes, -p) 8
POSIX message queues     (bytes, -q) unlimited
max rt priority                 (-r) 0
stack size              (kbytes, -s) 8192
cpu time               (seconds, -t) unlimited
max user processes              (-u) unlimited
virtual memory          (kbytes, -v) unlimited
file locks                      (-x) unlimited

Ovsem je treba vedet na co to nastavit. Jinak pro 32bit to je maximalne okolo 3.2GB

mizik

  • Návštěvník
  • Příspěvků: 72
    • mizici.com
Re: systemove informace C/C++
« Odpověď #5 kdy: 04 Srpna 2009, 17:25:17 »
jinak veci o disku se daji pry zjistit z
Kód: [Vybrat]
/sys/block/$DISK/queue/ , pripadne pomoci ioctl BLKSSZGET.

 

Provoz zaštiťuje spolek OpenAlt.