Dnes a zítra probíhá vývojářská konference Google I/O 2025. Sledovat lze na YouTube a na síti 𝕏 (#GoogleIO).
V Bostonu probíhá konference Red Hat Summit 2025. Vybrané přednášky lze sledovat na YouTube. Dění lze sledovat na síti 𝕏 (#RHSummit).
Společnost Red Hat oficiálně oznámila vydání Red Hat Enterprise Linuxu 10. Vedle nových vlastností přináší také aktualizaci ovladačů a předběžné ukázky budoucích technologií. Podrobnosti v poznámkách k vydání.
Tuto sobotu 24. května se koná historicky první komunitní den projektu Home Assistant. Zváni jsou všichni příznivci, nadšenci a uživatelé tohoto projektu. Pro účast je potřebná registrace. Odkazy na akce v Praze a v Bratislavě.
Troy Hunt představil Have I Been Pwned 2.0, tj. nový vylepšený web služby, kde si uživatelé mohou zkontrolovat, zda se jejich hesla a osobní údaje neobjevily v únicích dat a případně se nechat na další úniky upozorňovat.
Microsoft představil open source textový editor Edit bežící v terminálu. Zdrojové kódy jsou k dispozici na GitHubu pod licencí MIT.
V Seattlu a také online probíhá konference Microsoft Build 2025. Microsoft představuje své novinky. Windows Subsystem for Linux je nově open source. Zdrojové kódy jsou k dispozici na GitHubu pod licencí MIT.
Z příspěvku Turris Sentinel – co přinesl rok 2024 na blogu CZ.NIC: "Za poslední rok (únor 2024 – únor 2025) jsme zachytili 8,3 miliardy incidentů a to z 232 zemí a z jejich závislých území. Tyto útoky přišly od 6,2 milionu útočníků (respektive unikátních adres). SMTP minipot je stále nejlákavější pastí, zhruba 79 % útoků bylo směřováno na tento minipot, 16 % útoků směřovalo na minipot Telnet, 3 % útoků směřovaly na minipot HTTP a 2 % na minipot FTP. Dále jsme zaznamenali 3,2 milionu unikátních hesel a 318 tisíc unikátních loginů, které útočníci zkoušeli."
Byla vydána (Mastodon, 𝕏) nová verze 3.0.4 svobodné aplikace pro úpravu a vytváření rastrové grafiky GIMP (GNU Image Manipulation Program). Přehled novinek v oznámení o vydání a v souboru NEWS na GitLabu. Nový GIMP je již k dispozici také na Flathubu.
Byla vydána nová stabilní verze 7.4 webového prohlížeče Vivaldi (Wikipedie). Postavena je na Chromiu 136. Přehled novinek i s náhledy v příspěvku na blogu.
int nanosleep(const struct timespec *req, struct timespec *rem) struct timespec { time_t tv_sec; /* sekundy */ long tv_nsec; /* nanosekundy */ };Funkce nanosleep() při úspěšném proběhnutí vrací 0. Pokud se vyskytne chyba, funkce vrátí -1, proměnnou errno nastaví na jednu z možných symbolických konstant a v určitých případech zapíše zbývající čas do ukazatele rem, pokud není nastaven na NULL.
sleep(5); /* pauza 5 sekund */
#include <stdio.h> #include <stdlib.h> #include <string.h> #include <time.h> #include <errno.h> #include <limits.h> enum { MAXNUM = 100, MAXLINE = 25, DELAY = 500000000 }; typedef struct numbers { long array[MAXNUM]; int num; } NUMBERS; int readline(char *a); int estrtol(char *line, long *n); int cmp(const void *p1, const void *p2); void nanoprint(NUMBERS n); int main() { NUMBERS n = {{0}, 0}; char line[MAXLINE]; int i = 0; printf("Zadejte cela cisla:\n"); while (readline(line)) { if (estrtol(line, &n.array[i])) { n.num++; i++; } } printf("\n"); qsort(n.array, n.num, sizeof(n.array[0]), cmp); nanoprint(n); return 0; } int readline(char *line) { int len; if (fgets(line, MAXLINE, stdin) != NULL) { len = strlen(line); if (len + 1 == MAXLINE && line[len-1] != '\n') while (getchar() != '\n') ; if (line[len-1] == '\n') line[len-1] = '\0'; return 1; } else return 0; } int estrtol(char *line, long *n) { char *endptr; errno = 0; *n = strtol(line, &endptr, 10); if (*endptr != '\0') { printf("error: not a number\n"); return 0; } else if (errno == ERANGE && *n == LONG_MAX) { printf("error: overflow\n"); return 0; } else if (errno == ERANGE && *n == LONG_MIN) { printf("error: underflow\n"); return 0; } else if (endptr == line) { printf("error: empty input\n"); return 0; } else return 1; } int cmp(const void *p1, const void *p2) { long a, b, c; a = *(long *) p1; b = *(long *) p2; c = a < b ? -1 : a == b ? 0 : 1; return c; } void nanoprint(NUMBERS n) { struct timespec ts = {0, DELAY}; int i; for(i = 0; i < n.num; i++) { printf("%ld\n", n.array[i]); nanosleep(&ts, NULL); } }
Tiskni
Sdílej:
long int strtol(const char *str, char **endptr, int base)Proč vlastně?
const
nedat, aspoň se vyhnete zbytečnému přetypovávání v případě, že potřebujete předat string, který už const
je.
errno
na nulu. V opačném případě je jakýkoliv další pokus o zjištění selhání (přetečení) naprosto zbytečná záležitost. U příbuzných unsigned variant (strtoul
) bych zmínil, že klidně přijmou záporné číslo a "zkonvertují" ho na kladné (podle pravidla převodu signed na unsigned). Proto je dobré před voláním funkce zkontrolovat první nebílý znak, jestli není mínus.
man 3 strtol
).
int usleep(useconds_t usec)
z unistd.h?
NUMBERS n = {{0}, 0};ale
numbers_t numbers; // bzero(&numbers, sizeof(numbers_t)); /* keď nenastavuješ všetky prvy v štrukture pri inicializacií v programe */ numbers.array={0}; numbers.num=0;A parametre funkcie nedefinuj ako typ void, ale ako long *. Nakoľko môžeš pri preklade dať skontrolovať typovú kontrolu. Čo pri void sa stratí.
int cmp(const void *p1, const void *p2)
.