Nejnovější X.Org X server 21.1.24 a Xwayland 24.1.13 řeší 2 bezpečnostní chyby.
Clement "Clem" Lefebvre publikoval souhrn dění v Linux Mintu za červen 2026. Vypíchnuta je vylepšená podpora Waylandu. Už není považována za experimentální. V příští verzi Linux Mintu, plánována je na Vánoce, bude běh Cinnamonu plně podporován na X11 i Waylandu. V květnu na vývoj Linux Mintu přispělo 611 dárců celkovou částkou 19 612 dolarů. Dalších 2 326 patronů přispělo na Patreonu celkovou částkou 5 334 dolarů.
V Linuxu v KVM byla nalezena a v upstreamu již byla opravena kritická zranitelnost Januscape aneb CVE-2026-53359. Root na hostovaném počítači (virtuální stroj) může obejít izolaci a získat plnou kontrolu nad hostitelským systémem (DoS útok nebo vzdálené spuštění kódu s právy roota). Na obou hlavních architekturách – Intel i AMD. Zranitelnost v Linuxu existovala téměř 16 let (od srpna 2010 do června 2026).
Tribunál Soudního dvora Evropské unie dnes zamítl několik žalob, v nichž se americká společnost Apple ohrazovala proti pravidlům fungování velkých technologických společností na unijním trhu. Applu se nelíbilo, že jeho obchod s aplikacemi a operační systém iOS mají podléhat přísnějším povinnostem jen proto, že Brusel firmu považuje za takzvaného gatekeepera, tedy strážce přístupu.
Na WhatsAppu budou postupně v průběhu následujících měsíců zavedena uživatelská jména. Telefonní čísla tak mohou zůstat soukromá. Aktuálně si lze uživatelské jméno rezervovat.
Byl aktualizován TIOBE Index (Wikipedie). Programovací jazyk Rust se poprvé dostal do první desítky tohoto žebříčku popularity programovacích jazyků. Vede Python následovaný C, C++, Java, C#, …
Proton (Wikipedie), tj. fork Wine integrovaný ve Steamu umožňující na Linuxu hrát hry určené pouze pro Windows, byl vydán ve verzi 11.0-1. Přehled novinek se seznamem nově podporovaných her na GitHubu. Aktuální přehled všech podporovaných her na stránkách ProtonDB
Byly publikovány zdrojové kódy počítačové hry Unturned. Pro nekomerční účely. V plánu je přelicencování pod MIT. Hra Unturned je postavena nad multiplatformním herním enginem Unity.
První česká družice navržená a sestavená výhradně studenty se dostala na oběžnou dráhu Země. Družice KOSTKA, kterou vyvinul studentský tým YSpace z Vysokého učení technického v Brně (VUT), dnes odstartovala na palubě rakety Falcon 9 společnosti SpaceX v rámci mise Transporter-17 z kalifornské základny Vandenberg Space Force Base.
Po nákresech ovladače Steam Controller a puku společnost Valve na svém GitLabu publikovala projekt Inkterface, tj. podrobný návod (PDF, video v mp4) na sestavení předního panelu s e-papírovým displejem pro Steam Machine pro zobrazování systémových informací. Použity jsou součástky od společnosti Adafruit.
/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: