Byly zpracovány a na YouTube zveřejněny videozáznamy z konference LinuxDays 2025.
Na konferenci LinuxDays 2025 byl oficiálně představen nový router Turris Omnia NG.
Přímý přenos (YouTube) z konference LinuxDays 2025, jež probíhá tento víkend v Praze v prostorách FIT ČVUT. Na programu je spousta zajímavých přednášek.
V únoru loňského roku Úřad pro ochranu osobních údajů pravomocně uložil společnosti Avast Software pokutu 351 mil. Kč za porušení GDPR. Městský soud v Praze tuto pokutu na úterním jednání zrušil. Potvrdil ale, že společnost Avast porušila zákon, když skrze svůj zdarma dostupný antivirový program sledovala, které weby jeho uživatelé navštěvují, a tyto informace předávala dceřiné společnosti Jumpshot. Úřad pro ochranu osobních údajů
… více »Google Chrome 141 byl prohlášen za stabilní. Nejnovější stabilní verze 141.0.7390.54 přináší řadu novinek z hlediska uživatelů i vývojářů. Podrobný přehled v poznámkách k vydání. Opraveno bylo 21 bezpečnostních chyb. Za nejvážnější z nich (Heap buffer overflow in WebGPU) bylo vyplaceno 25 000 dolarů. Vylepšeny byly také nástroje pro vývojáře.
eDoklady mají kvůli vysoké zátěži technické potíže. Ministerstvo vnitra doporučuje vzít si sebou klasický občanský průkaz nebo pas.
Novým prezidentem Free Software Foundation (FSF) se stal Ian Kelling.
Na čem pracují vývojáři webového prohlížeče Ladybird (GitHub)? Byl publikován přehled vývoje za září (YouTube).
Vyšla kniha Počítačové programy a autorské právo. Podle internetových stránek nakladatelství je v knize "Významný prostor věnován otevřenému a svobodnému softwaru, jeho licencím, důsledkům jejich porušení a rizikům „nakažení“ proprietárního kódu režimem open source."
Red Hat řeší bezpečnostní incident, při kterém došlo k neoprávněnému přístupu do GitLab instance používané svým konzultačním týmem.
*********** server.c ************* #include <stdio.h> #include <stdlib.h> #include <errno.h> #include <string.h> #include <fcntl.h> #include <sys/types.h> #include <sys/socket.h> #include <sys/un.h> #define SOCK_PATH "socket" struct server_sock { int sock; /*socket serveru*/ int sock_c[256]; /*klientske sockety*/ int len; /*velikost vyhrazene pameti*/ int t; int n; /*pocet klientskych socketu*/ struct sockaddr_un local, remote; }; struct server_sock create_sock(void); struct server_sock create_sock(void) { struct server_sock server; char str[100]; if ((server.sock = socket(PF_UNIX, SOCK_STREAM, 0)) == -1) { fprintf(stdout, "socket : %s\n",strerror(errno)); exit(1); } server.local.sun_family = PF_UNIX; strcpy(server.local.sun_path, SOCK_PATH); unlink(server.local.sun_path); server.len = strlen(server.local.sun_path) + sizeof(server.local.sun_family); if (bind(server.sock, (struct sockaddr *)&server.local, server.len) == -1) { fprintf(stdout, "bind : %s\n",strerror(errno)); exit(1); } if (listen(server.sock, 10) == -1) { fprintf(stdout, "listen on server socket : %s\n",strerror(errno)); exit(1); } return(server); } int main(void) { struct server_sock server; char str[100]; int i = 0, n; int sockn = 0; int len; int sock; fd_set sock_set; /*vytvoreni socketu*/ server = create_sock(); sock = server.sock; //tv.tv_sec = 3; //tv.tv_usec = 0; printf("Cekam na spojeni...\n"); len = sizeof(server.remote); FD_ZERO(&sock_set); FD_SET(sock, &sock_set); while (1) { //FD_ZERO(&sock_set); //FD_SET(sock, &sock_set); for (i = 0; i < sockn; i++) FD_SET(server.sock_c[i], &sock_set); if (select(sock + 1, &sock_set, NULL, NULL, NULL) < 0) { fprintf(stdout, "select : %s\n",strerror(errno)); close(server.sock); unlink(SOCK_PATH); exit(1); } if (FD_ISSET(server.sock, &sock_set)) { len = sizeof(server.remote); if ((server.sock_c[sockn] = accept(server.sock, (struct sockaddr *)&server.remote, &len)) == -1) { fprintf(stdout, "accept : %s\n",strerror(errno)); close(server.sock); unlink(SOCK_PATH); exit(1); } FD_SET(server.sock_c[sockn], &sock_set); server.n = sockn++; fprintf(stdout, "Connected.\n"); } for (i = 0; i < sockn; i++) { if (FD_ISSET(server.sock_c[i], &sock_set)) { n = recv(server.sock_c[i], str, 100, 0); if (n <= 0) { fprintf(stdout, "recv : %s\n",strerror(errno)); FD_CLR(server.sock_c[i], &sock_set); close(server.sock_c[i]); exit (1); } printf("DDD: send\n"); if (send(server.sock_c[i], str, n, 0) <= 0) { fprintf(stdout, "send : %s\n",strerror(errno)); close(server.sock_c[i]); exit (1); } } } printf("go to back - select\n"); } close(server.sock); unlink(SOCK_PATH); return (0); } *************konec**************** Omlouvam se za delku prikladu, ale pro nazornost jej posilam cely. Dekuji za kazdou radu.
Prvý parameter funkcie select je počet popisovačovjj, tam bude určitě chyba. Ještě bych se zamyslel nad těmi zakomentovanými řádky na začátku while cyklu, mylím, že by tam být měly (nezakomentované)
poll()
jako náhradu select()
, jeho použití mi připadá trochu přehlednější.
Když už jsme u těch osobních preferencí, tak z hlediska přehlednosti bych to seřadil asi takto:
fork()
pthread_create()
poll()
select()
Tedy o obou bych uvažoval až ve chvíli, kdy bych měl vážné důvody nepoužít samostatné procesy nebo thready a jen pro specifické služby (velmi rychlé vyřízení požadavku, nevadí serializace).
Tiskni
Sdílej: