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
-
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.
-
ad.mem) zkus (size_t)-1, pokud to neprojde, hod to napolivic & etc ..
-
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?
-
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
-
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 :
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
-
jinak veci o disku se daji pry zjistit z
/sys/block/$DISK/queue/ , pripadne pomoci ioctl BLKSSZGET.