Where a calculator on the ENIAC is equipped with 18,000 vacuum tubes and weighs 30 tons, computers in the future may have only 1,000 vacuum tubes and weigh only 1.5 tons.
– Popular Mechanics, March 1949
dus als hij al 2x reset is krijg je 8 gig + huidige waarde ... je zult het zoiezo ergens moeten opslaan en zo kan je een vrij kleine size behouden.
If it ain't broken it doesn't have enough features
* odysseus vraagt zich wel af hoe ifconfig kan bijhouden hoe vaak die teller al is gereset, hij kan daar helemaal niet bij zolang je ifconfig niet draait...weird.
[overigens ben ik er vrij vast van overtuigd dat het een unsigned int is: je zou anders wel vreemde effecten krijgen als hij over de 2GB gaat: dan is je traffic niet nul, maar -2GB
Leven is het meervoud van lef | In order to make an apple pie from scratch, you must first create the universe.
Nee, dan zou de kernel hem zelf wel resetten naar 0 (hoop ik dan toch).Op zondag 13 januari 2002 20:00 schreef odysseus het volgende:
[overigens ben ik er vrij vast van overtuigd dat het een unsigned int is: je zou anders wel vreemde effecten krijgen als hij over de 2GB gaat: dan is je traffic niet nul, maar -2GB]
Vergeet niet dat unsigned getallen maar erg weinig gebruikt worden. PIDs en FDs zijn *ook* signed.
Om zoiets te upgraden moet je een hele nieuwe kernel maken, toch?
(ik weet niet heel erg veel van linux. Ik kan er mee uit de voeten, maar gebruik niet voor niets een standaard disk
Where a calculator on the ENIAC is equipped with 18,000 vacuum tubes and weighs 30 tons, computers in the future may have only 1,000 vacuum tubes and weigh only 1.5 tons.
– Popular Mechanics, March 1949
Hmm, en die kernel maar wachten tot dat ding aan zijn maximum zit en dan op nul zetten? Waarom dan niet een unsigned int die zichzelf op nul zet, dat is toch veel eenvoudiger en efficienter? Overigens heb ik het idee dat PID's ook unsigned zijn:Op zondag 13 januari 2002 20:22 schreef deadinspace het volgende:
[..]
Nee, dan zou de kernel hem zelf wel resetten naar 0 (hoop ik dan toch).
Vergeet niet dat unsigned getallen maar erg weinig gebruikt worden. PIDs en FDs zijn *ook* signed.
1
2
3
4
5
6
7
| odysseus:/win/kernel_drivers# grep -ri pid fs/proc/* | grep int | grep signed fs/proc/base.c: unsigned int fd, pid, ino; fs/proc/base.c: unsigned int pid, c; fs/proc/base.c:static int get_pid_list(int index, unsigned int *pids) fs/proc/base.c: unsigned int pid_array[PROC_MAXPIDS]; fs/proc/base.c: unsigned int nr_pids, i; odysseus:/win/kernel_drivers# setterm -file /termdump -dump |
Ik heb ook geen idee waarom dat soort vars signed zouden moeten zijn, maar ik kan dan ook geen fatsoenlijk C-programma schrijven
Leven is het meervoud van lef | In order to make an apple pie from scratch, you must first create the universe.
Op zondag 13 januari 2002 20:38 schreef odysseus het volgende:
Overigens heb ik het idee dat PID's ook unsigned zijn:
code:
1 2 3 4 5 6 7 odysseus:/win/kernel_drivers# grep -ri pid fs/proc/* | grep int | grep signed fs/proc/base.c: unsigned int fd, pid, ino; fs/proc/base.c: unsigned int pid, c; fs/proc/base.c:static int get_pid_list(int index, unsigned int *pids) fs/proc/base.c: unsigned int pid_array[PROC_MAXPIDS]; fs/proc/base.c: unsigned int nr_pids, i; odysseus:/win/kernel_drivers# setterm -file /termdump -dump
1
2
3
4
| [marcelm@nothing include]$ grep -r pid_t * 2> /dev/null | grep typedef | grep int | grep -v ipc asm/posix_types.h:typedef int __kernel_pid_t; bits/types.h:typedef int __pid_t; /* Type of process identifications. */ glib-1.2/glib.h:typedef int pid_t; |
Vreemd. Dan zouden ze in de kernel een ander type voor PIDs handhaven dan in userspace processes? Lijkt me nogal inefficient...
Een goede reden is dat functies dan ook negatieve waarden kunnen returnen voor bijvoorbeeld PIDs en FDs. Dit wordt vaak gebruikt om een error aan te duiden.Ik heb ook geen idee waarom dat soort vars signed zouden moeten zijn, maar ik kan dan ook geen fatsoenlijk C-programma schrijven, ik moet die taal nog altijd eens leren...
1
| open("/proc/net/dev", O_RDONLY) = 9 |
"Even" een int die in de kernel zit omturnen naar een 64bits waarde kan ook niet. Al was het maar omdat een heleboel programma's (zoals ifconfig) geen rekening houden met een int die groter is dan 32bits. De enige echte oplossing is dus (zoals al gezegd) de waarde op gezette tijden uitlezen, en in een andere variabele parkeren die van willekeurige lengte kan zijn. Enige probleem is dan inderdaad om bij te houden of de teller ondertussen gereset is, maar dat is dus vrij simpel na te gaan door te kijken of de nieuwe waarde lager is dan de vorige.
Maar dat is toch geen probleem?
ik bedoel; nu heb je eens in de zoveel dagen dat voor ong 5 minuten het aantal getransferde bytes niet klopt, mrtg pikt dat prima op
Het omzetten naar een 64bits getal zou ik niet weten hoe dat gaat zou er iig niet aan beginnen
Maar als je je "totale" trafic wilt weten, maak dan een scriptje die in mysql/een file de laatste waarde bijhoud en dan ongeveer zo rekent:
IF (laatste waarde > huidige waarde) totale waarde += (4G-laatse waarde) + huidige waarde
ELSE totale waarde += huidige waarde - laatste waarde.
moet makkelijk te doen zijn
"Een serveradmin, voluit een serveradministrator, is dan weer een slavenbeheerder oftewel een slavendrijver" - Rataplan
De reden waarom PID signed is : -1 is een error.[
Vreemd. Dan zouden ze in de kernel een ander type voor PIDs handhaven dan in userspace processes? Lijkt me nogal inefficient...
Maar met een unsigned int zou je toch kunnen afspreken dat 0 een error is? Of anders NULL, omdat 0 vaak als getal wordt gebruikt voor een succesvolle return...Op maandag 14 januari 2002 13:12 schreef igmar het volgende:
De reden waarom PID signed is : -1 is een error.
* odysseus neemt tenminste aan dat een unsigned int op 0 begint - zoals gezegd is mijn kennis van C vrij minimaal te noemen
Leven is het meervoud van lef | In order to make an apple pie from scratch, you must first create the universe.
interfaces.ifTable.ifEntry.ifInOctets.1 = Counter32: 1768730
interfaces.ifTable.ifEntry.ifInOctets.2 = Counter32: 4292256868
interfaces.ifTable.ifEntry.ifOutOctets.1 = Counter32: 1768730
interfaces.ifTable.ifEntry.ifOutOctets.2 = Counter32: 1668433561
een mooi Tshirt met Pim. is de beste enzo
Verwijderd
Zoals al vermeld: -1 = errorOp maandag 14 januari 2002 15:29 schreef odysseus het volgende:
[..]
Maar met een unsigned int zou je toch kunnen afspreken dat 0 een error is? Of anders NULL, omdat 0 vaak als getal wordt gebruikt voor een succesvolle return...
Ook snap ik niet waarom je een unsigned int nodig zou hebben voor pid's? Lijkt me sterk dat iemand meer dan 2 miljoen processes draaiend heeft op zijn computertje
INT_MAX : 2147483647 (Linux 2.4, GCC 2.95, zie limits.h)
Lees dan aub mijn hele post...Op maandag 14 januari 2002 13:12 schreef igmar het volgende:
De reden waarom PID signed is : -1 is een error.
NULL is 0. (je mag er niet vanuit gaan dat die gelijk zijn nee, maar in de praktijk zijn ze dat ongeveer 100% van de gevallen).Op maandag 14 januari 2002 15:29 schreef odysseus het volgende:
Maar met een unsigned int zou je toch kunnen afspreken dat 0 een error is? Of anders NULL, omdat 0 vaak als getal wordt gebruikt voor een succesvolle return...
Ja zeg... int is int hoor, integers werken in elke taal op dezelfde manier* odysseus neemt tenminste aan dat een unsigned int op 0 begint - zoals gezegd is mijn kennis van C vrij minimaal te noemen
True. Merk op dat int niet op alle OSsen/platformen 32 bits zijn.Op maandag 14 januari 2002 16:21 schreef cr33p het volgende:
Ook snap ik niet waarom je een unsigned int nodig zou hebben voor pid's? Lijkt me sterk dat iemand meer dan 2 miljoen processes draaiend heeft op zijn computertje
INT_MAX : 2147483647 (Linux 2.4, GCC 2.95, zie limits.h)
Hmm, ik kan me vergissen hoor, maar of je nu een pointer naar een var hebt die 0 is of een pointer naar een die NULL is, dat is toch wel een verschil? But then, ik heb er geen ervaring meeOp maandag 14 januari 2002 17:07 schreef deadinspace het volgende:
NULL is 0. (je mag er niet vanuit gaan dat die gelijk zijn nee, maar in de praktijk zijn ze dat ongeveer 100% van de gevallen).
Hmm, en perl dan? Die heeft alleen intern dergelijke datatypen, voor de programmeur is het gewoon 'my $var = waarde', waarbij waarde zowel een string als een int of een short of een boolean kan zijn...en perl is zeker een echte taalJa zeg... int is int hoor, integers werken in elke taal op dezelfde manier
[..]
Leven is het meervoud van lef | In order to make an apple pie from scratch, you must first create the universe.
Een pointer met waarde NULL is een ongeldige pointer.Op maandag 14 januari 2002 17:20 schreef odysseus het volgende:
Hmm, ik kan me vergissen hoor, maar of je nu een pointer naar een var hebt die 0 is of een pointer naar een die NULL is, dat is toch wel een verschil? But then, ik heb er geen ervaring mee.
In de praktijk geldt: NULL = 0, dus een pointer dat naar geheugenadres 0 wijst (aka de eerste byte van je ram) is ongeldig.
Dus het gebruik van NULL zou je niet helpen in die PID-situatie.
Het gebruik van NULL zou je sowieso niet helpen, omdat NULL van het type pointer is en een PID van het type pid_t trouwens.
Wat jij ergens anders voorstelde: PID 0 is ongeldig (en indiceert dus een error), alle andere waarden zijn wel geldig (en dan een unsigned int nemen) is wel te realiseren.
Maar zoals iemand anders al opmerkte: meer dan 2 miljard processes heb je toch niet nodig op jouw PC.
Sterker nog: je PC /kan/ dat absoluut met geen mogelijkheid.
Computers die wel meer dan 2 miljard processes aan zouden kunnen zouden dan een pid_t van 64 bits nodig hebben, en dat is op zo'n apparaat waarschijnlijk wel het geval.
Mja, dus hanteert perl naar de programmeur toe geen ints.Hmm, en perl dan? Die heeft alleen intern dergelijke datatypen, voor de programmeur is het gewoon 'my $var = waarde', waarbij waarde zowel een string als een int of een short of een boolean kan zijn...en perl is zeker een echte taal.
Maar integers omvatten doorgaans een gehele getallen range van x tot y, waarbij x =< 0 < y, in welke taal je ook werkt. Dat bedoelde ik.
Ook de waarden die je via snmp terug krijgt zullen een keer roteren; dat kun je zien aan de "Counter32" die ervoor staat. Zijn dus ook gewoon ints van max ~4GB. De waarde van interfaces.ifTable.ifEntry.ifInOctets.2 zit daar zelfs al vrij dichtbij, nog maar 2710428 bytes te gaanOp maandag 14 januari 2002 15:56 schreef Oezie Woezie het volgende:
Waarom doe je het op z'n manier, als je het toch met MRTG doet kan je het misschien beter gelijk met SNMP doen.
interfaces.ifTable.ifEntry.ifInOctets.1 = Counter32: 1768730
interfaces.ifTable.ifEntry.ifInOctets.2 = Counter32: 4292256868
interfaces.ifTable.ifEntry.ifOutOctets.1 = Counter32: 1768730
interfaces.ifTable.ifEntry.ifOutOctets.2 = Counter32: 1668433561
Verwijderd
neuh een int is zelfs niet altijd 32 bitsOp maandag 14 januari 2002 17:07 schreef deadinspace het volgende:
Ja zeg... int is int hoor, integers werken in elke taal op dezelfde manier
[..]
So? Heeft dat iets met het principe van een int te maken? Ik schreef ook al, om mijzelf te verduidelijken:Op dinsdag 15 januari 2002 00:01 schreef trifling het volgende:
neuh een int is zelfs niet altijd 32 bits
Verder schreef ik ergens:Op maandag 14 januari 2002 18:59 schreef deadinspace het volgende:
Maar integers omvatten doorgaans een gehele getallen range van x tot y, waarbij x =< 0 < y, in welke taal je ook werkt. Dat bedoelde ik.
Op maandag 14 januari 2002 17:07 schreef deadinspace het volgende:
Merk op dat int niet op alle OSsen/platformen 32 bits zijn.
Verwijderd
jij hebt gelijk als je zegt dat ik met mijn slechte oog gelezen hebOp dinsdag 15 januari 2002 00:26 schreef deadinspace het volgende:
[..]
So? Heeft dat iets met het principe van een int te maken? Ik schreef ook al, om mijzelf te verduidelijken:
[..]
Verder schreef ik ergens:
[..]
maar ik heb gelijk dat je niet te snel moet roepen dat "een int een int is"
kost je drie offtopic post om jezelf te verduidelijken
Hehe, point taken...Op dinsdag 15 januari 2002 06:47 schreef trifling het volgende:
maar ik heb gelijk dat je niet te snel moet roepen dat "een int een int is"
kost je drie offtopic post om jezelf te verduidelijken