Nezisková organizace Electronic Frontier Foundation (EFF) hájící občanské svobody v digitálním světě po téměř 20 letech opouští platformu X (dříve Twitter). Na platformách Bluesky, Mastodon, LinkedIn, Instagram, TikTok, Facebook, Threads a YouTube zůstává.
Terminálový textový editor GNU nano byl vydán ve verzi 9.0. Vylepšuje chování horizontálního posouvání pohledu na dlouhé řádky a chování některých klávesových zkratek. Více v seznamu změn.
Ministerstvo financí ve spolupráci s finanční správou dnes představilo beta verzi aplikace využívající umělou inteligenci pro předvyplnění daňového přiznání. Není třeba přepisovat údaje z různých potvrzení, ani hledat správné řádky, kam údaje napsat. Stačí nahrát dokumenty a využít AI.
Výrobce počítačových periferií Keychron zveřejnil repozitář se schématy šasi klávesnic a myší. Licence je restriktivní, zakazuje většinu komerčních užití a v podstatě jsou tak data vhodná pouze pro výukové účely, hlášení a opravy chyb, případně výrobu vlastního příslušenství.
Správce balíčků APT, používaný v Debianu a odvozených distribucích, byl vydán ve verzi 3.2 (seznam změn). Mezi novinkami figurují nové příkazy pro práci s historií, včetně vracení transakcí.
Společnost Anthropic oznámila Projekt Glasswing a s ní související AI model Claude Mythos Preview. Jedná se o iniciativu zaměřenou na kybernetickou bezpečnost, do které se zapojily velké technologické společnosti Amazon Web Services, Anthropic, Apple, Broadcom, Cisco, CrowdStrike, Google, JPMorganChase, Linux Foundation, Microsoft, NVIDIA a Palo Alto Networks. Anthropic věří, že nový AI model Claude Mythos Preview dokáže
… více »Firma Ojective Development vydala svůj nástroj pro monitorování a řízení odchozích síťových připojení Little Snitch i pro operační systém Linux. Linuxová verze se skládá ze tří komponent: eBPF program pro zachytávání provozu a webové rozhraní jsou uvolněny pod GNU GPLv2 a dostupné na GitHubu (převážně Rust a JavaScript), jádro backendu je proprietární pod vlastní licencí, nicméně zdarma k použití a redistribuci (cena přitom normálně … více »
Vojenské zpravodajství (VZ) se v březnu zapojilo do mezinárodní operace proti aktivitám hackerské skupiny APT28, která je spojovaná s ruskou vojenskou zpravodajskou službou GRU a která přes slabě zabezpečené routery prováděla kybernetické útoky na státní a další organizace v ČR i zahraničí. Operaci vedl americký Federální úřad pro vyšetřování (FBI) a jejím cílem bylo odebrat útočníkům přístup k napadeným zařízením a ty následně … více »
Tvůrcem nejpopulárnější kryptoměny bitcoin, který se skrývá za pseudonymem Satoši Nakamoto (Satoshi Nakamoto), je britský kryptograf Adam Back. Na základě vlastní investigativní práce to tvrdí americký deník The New York Times (NYT). Několik indicií podle autorů jasně ukazuje na to, že Back a Nakamoto jsou stejný člověk. Jde mimo jiné o podobný odborný a osobnostní profil či totožné chyby a manýry v psaném projevu.
Google Chrome 147 byl prohlášen za stabilní. Nejnovější stabilní verze 147.0.7727.55 přináší řadu novinek z hlediska uživatelů i vývojářů. Podrobný přehled v poznámkách k vydání. Vylepšeny byly také nástroje pro vývojáře. Přehled novinek v Chrome DevTools 145 až 147 také na YouTube.
/proc/net/dev, ale to není podstatný, protože tam mám spíš nějakou chybu, jenže nevím jakou... Ukazuje mi nesmysl:
dl 18014261070691488 kB/s up 0 kB/sNení na tohle třeba nějaká knihovna? Pokud ne, co tam mám špatně? Díky...
Pro začátek zkus program v případě že se nepovede otevřít ten soubor rovnou zabít
cat /proc/net/dev | grep eth0 | awk '{print $1}' (za predpokladu ze si zmenis eth0 :)

awk '/eth0/ {print $1}' /proc/net/dev
$ time for ((i=0; i<999; i++))
do
awk '/eth0/ {print $1}' /proc/net/dev
done > /dev/null
real 0m2.008s
user 0m0.908s
sys 0m1.092s
$ time for ((i=0; i<999; i++))
do
cat /proc/net/dev | grep eth0 | awk '{print $1}'
done > /dev/null
real 0m5.584s
user 0m2.261s
sys 0m3.295s
No, vyřešeno, dík...
S využitím standardní C++ knihovny by se to dalo napsat mnohem elegantněji.Věřím. Zatím nemám peníze na Mistrovství v C++, takže to asi nevymyslím
Zatím zkusím najít nějaký program v C++, ve kterém se se soubory z /proc pracuje, abych viděl jak to z nich dolují
return vyhodil exception, takže by zjistil, co se děje… :-)
ifstream f("/proc/net/dev");
string s;
while(getline(f, s))
if (s.find("eth0") != -1)
cout << s << endl;Tohle vypíše řádek obsahující "eth0", jenže jak z toho dostat ty dvě hodnoty (počet přijatých a odeslaných bajtů) aby to bylo mnohem elegantnější?
Např. takhle:
class Netload {
public:
typedef unsigned long long count_t;
std::string name;
count_t d;
count_t u;
Netload(count_t id = 0, count_t iu = 0) { d = id; u = iu; }
~Netload() {}
const Netload operator - (const Netload& x);
};
inline const Netload Netload::operator - (const Netload& x)
{
return Netload(d - x.d, u - x.u);
}
std::istream& operator >> (std::istream& s, Netload& x)
{
std::string buff;
getline(s, buff, ':');
if (!s) return s;
s >> x.d;
Netload::count_t tmp;
for (int i=0; i<7; i++)
s >> x;
s >> x.u;
s.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
return s;
}
bool GetStat(const std::string& ifname, Netload& stat)
{
std::ifstream s("/proc/net/dev");
if (!s) throw std::runtime_error("cannot open /proc/net/dev");
s.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
s.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
while (s >> stat) {
if (stat.name == ifname) return true;
}
return false;
}
Btw, budu to ještě muset ověřit, ale když použiju tenhle main(), tak se zdá že neměří upload, ukáže vždy nulu...
int main(int argc, char** argv) {
if (argc != 2) {
cout << "Usage: " << argv[0] << " eth0\n";
return 1;
}
Netload before, now, diff;
GetStat(argv[1], before);
sleep(1);
GetStat(argv[1], now);
diff.d = now.d - before.d;
diff.u = now.u - before.u;
cout << "dl " << diff.d / 1024 << " kB/s\nup " << diff.u / 1024 << " kB/s\n";
}
To bude tím, že jsem to nezkoušel. :-) Jinak by tento jednoúčelový prográmek šel samozřejmě napsat jednodušeji, ale předpokládám, že s těmi hodnotami budete chtít pracovat nějak soustavněji, takže spíš než na jednoduchost implementace té třídy jsem se zaměřil na jednoduchost použití. Zrovna tak místo konstanty 'std::numeric_limits<std::streamsize>::max()' jsem mohl napsat třeba 256, ale IMHO je lepší si na podobné bulharské konstanty nezvykat a psát všude to, co tam logicky patří. Takže druhý pokus:
#include <iostream>
#include <fstream>
#include <stdexcept>
#include <unistd.h> // sleep
class Netload {
public:
typedef unsigned long long count_t;
std::string name;
count_t d;
count_t u;
Netload() { d = u = 0; }
Netload(std::string& iname, count_t id = 0, count_t iu = 0)
: name(iname) { d = id; u = iu; }
~Netload() {}
const Netload operator - (const Netload& x);
};
inline const Netload Netload::operator - (const Netload& x)
{
return Netload(name, d - x.d, u - x.u);
}
inline void trimleft(std::string& s)
{
unsigned i = 0;
unsigned L = s.length();
while (i<L && s[i]==' ') i++;
s.erase(0, i);
}
std::istream& operator >> (std::istream& s, Netload& x)
{
getline(s, x.name, ':');
if (!s) return s;
trimleft(x.name);
s >> x.d;
Netload::count_t tmp;
for (int i=0; i<7; i++)
s >> tmp;
s >> x.u;
s.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
return s;
}
std::ostream& operator << (std::ostream& s, const Netload& x)
{
s << x.name << ": dn " << x.d/1024 << " KB, up " << x.u/1024 << " KB\n";
return s;
}
void GetStat(const std::string& ifname, Netload& stat)
{
std::ifstream s("/proc/net/dev");
if (!s) throw std::runtime_error("cannot open /proc/net/dev");
s.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
s.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
while (s >> stat) {
if (stat.name == ifname) return;
}
throw std::runtime_error("cannot read statistics for selected interface");
}
int main(int argc, char** argv)
{
try {
if (argc != 2)
throw std::runtime_error("Usage: transfer <ifname>");
Netload before, now;
GetStat(argv[1], before);
sleep(1);
GetStat(argv[1], now);
std::cout << (now - before);
return 0;
}
catch(std::exception& e) {
std::cerr << "transfer: " << e.what() << std::endl;
return 1;
}
}
Tou elegancí jsem myslel hlavně to, jak se vám zpřehlední právě main() a zejména zpracování chyb. Díky použití nástrojů jazyka C++ můžete totiž oddělit reakci na chybu od její detekce.
$ mrtg-ip-acct eth0 236054352 240845652 4:05pm up 199 days, 12:11, 1 user, load average: 0.00, 0.02, 0.00 localhost
Tiskni
Sdílej: