Fórum Ubuntu CZ/SK

Ubuntu pro osobní počítače => Software => Příkazový řádek a programování pro GNU/Linux => Téma založeno: mizik 30 Července 2009, 17:35:05

Název: systemove informace C/C++
Přispěvatel: mizik 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 (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.
Název: Re: systemove informace C/C++
Přispěvatel: nettezzaumana 04 Srpna 2009, 00:28:57
ad.mem) zkus (size_t)-1, pokud to neprojde, hod to napolivic & etc ..
Název: Re: systemove informace C/C++
Přispěvatel: mizik 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?
Název: Re: systemove informace C/C++
Přispěvatel: nettezzaumana 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
Název: Re: systemove informace C/C++
Přispěvatel: mizik 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
Název: Re: systemove informace C/C++
Přispěvatel: mizik 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.