Na vývojářské konferenci Applu WWDC23 byla představena řada novinek (cz): brýle Apple Vision Pro, MacBook Air 15” s čipem M2, Mac Studio s čipem M2 Max nebo M2 Ultra, Mac Pro s čipem M2 Ultra, iOS 17, iPadOS 17, macOS Sonoma, watchOS 10, …
Chystá se poslední jarní Virtuální Bastlírna. Nachystejte si ledové kávy, mojita a vodní chladiče a pojďte se se strahovskými bastlíři pobavit o technice a bastlení! Ptáte se, co mají bastlíři za novinky? Například se ukázalo, že OLED s SSD1306 ve skutečnosti nejsou nutně jen černobílé. Vyšla také nová verze KiCADu včetně betaverze pluginu pro tvorbu databázových knihoven pro KiCAD v InvenTree a na internetu se objevil USB
… více »6. červen je dnem za skutečný internet (neboli Světový den IPv6). Již tradiční příležitost urgovat svého ISP, kdy zavede do sítě IPv6, ale také příležitost šířit osvětu i mezi netechnické uživatele. V současnosti má IPv6 v ČR jen cca 20 % uživatelů (podle statistik společností Akamai a Google).
Festival plný workshopů, interaktivních činností a především nadšených a zvídavých lidí Maker Faire Prague 2023 proběhne o víkendu 10. a 11. června na Výstavišti Praha.
Byla vydána verze 8.18 z Debianu vycházející linuxové distribuce DietPi pro (nejenom) jednodeskové počítače. Přehled novinek v poznámkách k vydání.
Projekty Blink a Blinkenlights dospěly do verze 1.0. Jedná se o x86-64-linux emulátor a jeho TUI nadstavbu sloužící jako debugger. Blink je v porovnání s qemu-x86_64 menší a rychlejší.
Bylo potvrzeno, že Debian 12 s kódovým jménem Bookworm vyjde v tuto sobotu 10. června.
Byla vydána nová verze 2023.2 linuxové distribuce navržené pro digitální forenzní analýzu a penetrační testování Kali Linux (Wikipedie). Přehled novinek se seznamem nových nástrojů v oficiálním oznámení. Zdůraznit lze předpřipravené obrazy pro Hyper-V nebo to, že ve výchozím prostředí Xfce bylo PulseAudio nahrazeno multimediálním serverem PipeWire.
Tento týden byla vydána nová verze 1.52 webového prohlížeče Brave (Wikipedie, GitHub). Postavena je na Chromiu 114. Z novinek lze vypíchnout možnost povolit vertikální karty (vertical tabs). Také bylo představeno Brave Search API k vyhledávači Brave Search.
Matthias Clasen z Red Hatu oznámil v diskusním listu vývojářů Fedora Linuxu, že tým Red Hat Display Systems se zaměří na Wayland a podporu HDR na Linuxu a přestane spravovat RPM balíčky pro LibreOffice. V další major verzi RHELu už LibreOffice nebude. Pokud se nenajde správce balíčků pro Fedora Linux, zůstane pouze LibreOffice ve Flatpaku.
Dobry den, trochu si hraji se socketama v linuxu, takovy maly chat jen mezi dvema pocitaci, jednoduse se pripojim k druhemu stroji, ten muze poslat data nebo naopak je mohu poslat ja.
Mam trochu problem jak do jednoho programu vmesnat i to odesilani, umim prijimat data, cekam v nekonecne smycce a ctu data ze socketu, pokud se nejaka objevi tak je jen zobrazim.
Lze nejak zaridit neblokujici volani read? Abych mohl dovolit uzivateli v tu chvili i zadavat data, ukoncit enterem a odeslat?
Nebo lze nejak zaridit, aby se po prichodu dat vyvolava nejaka mnou definovana fce? Nebo treba signal.
Nebo tuto ulohu musim rozdeli do vlakna ve kterem budu jen cist data ze site a v hlavnim main programu budu cekat na uzivatelsky vstup a ten odesilat do site?
Jo abych nezapomel, pisu to v jazyce C.
Dekuji za info jak toto vyresit.
O_NONBLOCK
rovnou při volání open()
nebo ho následně nastavit pomocí fcntl()
. U socketu to asi jde jen tím druhým způsobem. Obvykle dávám přednost čtení v samostatném threadu nebo procesu, ale ve vašem případě bude možná neblokující čtení v kombinaci s poll()
(nebo select()
) jednodušší.
time
(nebo daytime
, nikdy si nepamatuji, která je která), mp-poll
funguje pomocí poll()
, mp-fork
používá samostatné procesy a mp-thread
samostatná vlákna. Není to sice zrovna to, co byste potřeboval (tahle služba od klienta nic nečte), ale třeba vám to k něčemu bude.
int sock; ... struct timeval timeout; timeout.tv_usec = 0; char buffer[BUFFER_SIZE]; ssize_t ret; fd_set sock_set; FD_ZERO(&sock_set); while(1) { timeout.tv_sec = TIMEOUT; /* nastaveni deskriptoru ktere budem sledovat */ FD_SET(sock, &sock_set); FD_SET(STDIN_FILENO, &sock_set); /* sledovani deskriptoru */ if((ret = select(MAX(sock, STDIN_FILENO)+1, &sock_set, 0, 0, &timeout)) == -1) /* osetreni chyby */ /* pokud lze cist ze socketu */ if(FD_ISSET(sock, &sock_set)) { if((ret = recv(sock, buffer, BUFFER_SIZE, O_NONBLOCK) == -1) /* osetreni chyby */ if(ret == 0) break; if((ret = write(STDOUT_FILENO, buffer, ret)) == -1) /* osetreni chyby */ } /* pokud lze cist ze std. vstupu */ if(FD_ISSET(STDIN_FILENO, &sock_set)) { if((ret = read(STDIN_FILENO, buffer, BUFFER_SIZE)) == -1) /* osetreni chyby */ */ if(ret == 0) break; if((ret = send(sock, buffer, ret, O_NONBLOCK) == -1) /* osetreni chyby */ } ... }
int oldFlag = fcntl( sock_id, F_GETFL, 0 ); fcntl( sock_id, F_SETFL, oldFlag | O_NONBLOCK );
Tiskni
Sdílej: