Open source platforma Home Assistant (Demo, GitHub, Wikipedie) pro monitorování a řízení inteligentní domácnosti byla vydána ve verzi 2024.12.
Byla vydána verze 31.0 svobodného softwaru OBS Studio (Open Broadcaster Software, Wikipedie) určeného pro streamování a nahrávání obrazovky počítače. Přehled novinek na GitHubu. Instalovat lze také z Flathubu.
Emulátory Box86 a Box64 umožňující spouštět linuxové aplikace pro x86 a x86_64 na jiných než x86 a x86_64 architekturách, například ARM a ARM64, byly vydány v nových verzích: Box86 0.3.8 a Box64 0.3.2. Ukázka možností na YouTube.
Byla vydána nová verze 6.1 neměnné (immutable) distribuce openSUSE Leap Micro určené pro běh kontejneru a virtuálních strojů. S vydáním verze 6.1 byla ukončena podpora verze 5.5.
Poslanci dnes ve třetím čtení schválili návrh zákona o digitálních financích. Cílem zákona je implementace předpisů Evropské unie v oblasti digitálních financí, konkrétně nařízení DORA (Digital Operational Resilience Act) o digitální provozní odolnosti finančního sektoru a nařízení MiCA (Markets in Crypto Assets) o trzích kryptoaktiv. Zákon nyní míří k projednání do Senátu ČR. U kryptoměn bude příjem do 100 tisíc Kč za zdaňovací období osvobozen od daně, podobně jako u cenných papírů, a to za podmínky jejich držení po dobu alespoň 3 let.
O víkendu (15:00 až 23:00) proběhne EmacsConf 2024, tj. online konference vývojářů a uživatelů editoru GNU Emacs. Sledovat ji bude možné na stránkách konference. Záznamy budou k dispozici přímo z programu.
Mozilla má nové logo a vizuální identitu. Profesionální. Vytvořeno u Jones Knowles Ritchie (JKR). Na dalších 25 let.
Bylo rozhodnuto, že nejnovější Linux 6.12 je jádrem s prodlouženou upstream podporou (LTS). Ta je aktuálně plánována do prosince 2026. LTS jader je aktuálně šest: 5.4, 5.10, 5.15, 6.1, 6.6 a 6.12.
Byla vydána nová stabilní verze 3.21.0, tj. první z nové řady 3.21, minimalistické linuxové distribuce zaměřené na bezpečnost Alpine Linux (Wikipedie) postavené na standardní knihovně jazyka C musl libc a BusyBoxu. Z novinek lze vypíchnou počáteční podporu architektury Loongson LoongArch64.
int main( int argn, char **arg ) { int port = atoi( arg[ 1 ] ); int sock_listen = socket( AF_INET, SOCK_STREAM, 0 ); in_addr addr_any = { INADDR_ANY }; sockaddr_in srv_addr; srv_addr.sin_family = AF_INET; srv_addr.sin_port = htons( port ); srv_addr.sin_addr = addr_any; // set socket options to reuse address and port again in short time int opt = 1; setsockopt( sock_listen, SOL_SOCKET, SO_REUSEADDR, &opt, sizeof( opt ) ); // assign address and port to socket bind( sock_listen, (const sockaddr * ) &srv_addr, sizeof( srv_addr ) ); listen( sock_listen, 1 ); int sock_client = 0; // go! while ( 1 ) { char buf[ 100 ]; fd_set read_wait_set; // set all bits to zero FD_ZERO( &read_wait_set ); // wait for stdin FD_SET( STDIN_FILENO, &read_wait_set ); // select listen or client socket if ( sock_client ) FD_SET( sock_client, &read_wait_set ); else FD_SET( sock_listen, &read_wait_set ); // wait for selected handles if ( select( MAX( sock_client, sock_listen ) + 1, &read_wait_set, 0, 0, 0 ) < 0 ) break; // data on stdin? if ( FD_ISSET( STDIN_FILENO, &read_wait_set ) ) { // read data from stdin int l = read( STDIN_FILENO, buf, sizeof( buf ) ); if ( l < 0 ) printf( "Unable to read data from stdin." ); else printf( "Got %d bytes from stdin.", l ); // send data to client l = write( sock_client, buf, l ); if ( l < 0 ) printf( "Unable send data to client." ); else printf( "Sent %d bytes to client.", l ); } // new connection form client? else if ( FD_ISSET( sock_listen, &read_wait_set ) ) { sockaddr_in rsa; int rsa_size = sizeof( rsa ); // accept connection from client sock_client = accept( sock_listen, ( sockaddr * ) &rsa, ( socklen_t * ) &rsa_size ); uint lsa = sizeof( srv_addr ); // get my identification getsockname( sock_client, ( sockaddr * ) &srv_addr, &lsa ); // get client info getpeername( sock_client, ( sockaddr * ) &srv_addr, &lsa ); printf( "Peer name: '%s' port: %d", inet_ntoa( srv_addr.sin_addr ), ntohs( srv_addr.sin_port ) ); printf( "Enter 'quit' to quit server." ); } // data from client? else if ( FD_ISSET( sock_client, &read_wait_set ) ) { // read data from socket int l = read( sock_client, buf, sizeof( buf ) ); if ( !l ) { printf( "Client close socket." ); close( sock_client ); sock_client = 0; break; } else if ( l < 0 ) printf( "Unable to read data from socket." ); else printf( "Read %d bytes from socket.", l ); // send all data to stdout l = write( STDOUT_FILENO, buf, l ); // check, if client ask to close connection if ( !strncasecmp( buf, "close", 5 ) ) { printf( "Client sent 'close' request, connection closed." ); printf( "Now wait for new client." ); close( sock_client ); sock_client = 0; } } // quit request from server or client if ( !strncasecmp( buf, "quit", 4 ) ) { close( sock_client ); printf( "Quit request entered... exiting now...\n" ); break; } } close( sock_listen ); return 0; }Je to socket server. Prijima pripojeni od klientu a vypise do konzole zpravu, kterou klient napise. Ja bych prave potreboval aby server prijimal spojeni od nekolika klientu najednou a kdyz nejaky klient neco napise, server to vypise do konzole a kdyz neco napise server, vypisou to na svou konzoli vsichni klienti. Zatim jsem jen prisel na to, ze musim vlozit radek "int pid = fork()" do kodu za funkci accept() a nechat otcovsky proces at vyrizuje pripojeni a nechat potomka at dela zbytek, ale stale se mi to nedari! Mohli byste mi poradit? Byl bych vdecny za jakoukoliv pomoc. Predem diky.
Tiskni Sdílej: