abclinuxu.cz AbcLinuxu.cz itbiz.cz ITBiz.cz HDmag.cz HDmag.cz abcprace.cz AbcPráce.cz
AbcLinuxu hledá autory!
Inzerujte na AbcPráce.cz od 950 Kč
Rozšířené hledání
×

včera 19:46 | Nová verze

dnsdist, specializovaný balancer pro DNS provoz, dosáhl stabilní verze 1.2.0. Tento software vyvíjí komunita kolem PowerDNS a neměl by uniknout pozornosti nikomu, kdo provozuje vytíženější rekurzivní DNS servery. Balancer je vhodný k obraně před DDoS útoky, je skriptovatelný v LUA, disponuje konzolovým rozhraním a má spoustu dalších zajímavých vlastností.

… více »
BigWrigley | Komentářů: 0
včera 15:22 | Nová verze

Byla vydána verze 9.5 open source alternativy GitHubu, tj. softwarového nástroje s webovým rozhraním umožňujícího spolupráci na zdrojových kódech, GitLab (Wikipedie). Představení nových vlastností v příspěvku na blogu. Zdůraznit lze možnost ověřování GPG podpisů u commitů.

Ladislav Hagara | Komentářů: 2
22.8. 16:22 | Nová verze

Byla vydána verze 0.11.0 softwaru pro statistickou analýzu dat GNU PSPP (Wikipedie), svobodné alternativy k proprietárnímu softwaru IBM SPSS Statistics (Wikipedie). Vedle několika vylepšení a oprav chyb jsou řešeny také 2 bezpečnostní chyby CVE-2017-10791 a CVE-2017-10792. O týden později byla vydána verze 1.0.0 přinášející pouze aktualizaci překladů. Proč verze 1.0.0 a ne například 0.11.1? Dle vývojářů jsou důvody následující:

… více »
Ladislav Hagara | Komentářů: 0
22.8. 10:35 | Komunita

Na blogu Oracle se objevila zpráva o tom, že plánovaná verze Java EE 8 bude uvolněna jako open source (referenční implementace a compatibility kit). V současné době je uvolněna jen Java SE (standard edition) pod licencí GPLv2 v podobě OpenJDK (Open Java Development Kit), kterou začal v roce 2006 uvolňovat Sun.

Max | Komentářů: 4
21.8. 23:55 | IT novinky

Google na YouTube oficiálně představil Android 8.0 Oreo. Přehled novinek v příspěvku na blogu věnovaném vývojářům.

Ladislav Hagara | Komentářů: 33
21.8. 16:44 | Zajímavý článek

Po téměř 3 měsících od vydání třetího čísla publikoval Michal Špaček na svých stránkách čtvrté číslo newsletteru věnovanému bezpečnosti, bezpečnému vývoji převážně webových aplikací a bezpečnosti uživatelů. Jedná se současně o číslo poslední: "Nepíše se mi to lehce, a trvalo to, než jsem to ze sebe dostal, ale tohle je poslední newsletter v této podobě. Ani jsem ho nestihl pojmenovat a už jsem ho zabil. Nezbývá mi tolik času, abych každou událost, novinku a změnu v prohlížeči detailně popisoval tak, jak bych v newsletteru chtěl, mrzí mě to".

Ladislav Hagara | Komentářů: 2
21.8. 07:00 | Nová verze

Byla vydána diaspora* ve verzi 0.7.0.0. Jedná se o svobodný software, který slouží jako osobní webový server pro poskytování služeb sociální sítě (Wikipedie). Přehled novinek v příspěvku na blogu a na GitHubu. Sociální síť diaspora* byla před pěti lety předána komunitě.

Ladislav Hagara | Komentářů: 0
21.8. 06:00 | IT novinky

Společnost Hardkernel stojící za jednodeskovými počítači ODROID představila na YouTube minipočítač určený pro domácí cloud ODROID-HC1 vycházející z ODROID-XU4. Minipočítač s kovovou krabičkou, do které stačí vložit 2 a půl palcový disk, lze koupit za 49 dolarů. ODROID-HC1 je stohovatelný.

Ladislav Hagara | Komentářů: 39
20.8. 16:22 | Nová verze

Byl vydán DB Browser for SQLite (sqlitebrowser) ve verzi 3.10.0. Nejnovější stabilní verze této grafické nadstavby nad relačním databázovým systémem SQLite (Wikipedie) přináší například integraci s DBHub.io, tj. platformou pro sdílení SQLite databází. Podrobnosti na GitHubu.

Ladislav Hagara | Komentářů: 2
20.8. 08:00 | IT novinky

Andy Rubin, spoluzakladatel společnosti Android, jež byla v roce 2005 koupena Googlem, nyní CEO společnosti Essential Products, oznámil předprodej chytrého telefonu Essential. Telefon se začne rozesílat 1. září. Cena telefonu je 699 dolarů. Cena telefonu současně s 360° kamerou s rozlišením 4K byla stanovena na 749 dolarů. Kameru, v budoucnu i další příslušenství, lze k telefonu připojit pomocí konektoru s magnety.

Ladislav Hagara | Komentářů: 1
Těžíte nějakou kryptoměnu?
 (5%)
 (2%)
 (18%)
 (76%)
Celkem 374 hlasů
 Komentářů: 21, poslední 13.8. 09:57
    Rozcestník

    Funkce strtol a nanosleep (jazyk C)

    28.3. 21:09 | Přečteno: 848× | Linux | poslední úprava: 28.3. 21:07

    Funkce strtol() se nachází v hlavičkovém souboru stdlib.h a je součástí standardní knihovny ANSI C.

    long int strtol(const char *str, char **endptr, int base)

    str je řetězec s číslem,

    endptr je zbývající nečíselná část. Takže pokud v str bude "25pes", endptr bude obsahovat "pes". Pokud o tuto koncovku nestojíme, můžeme endptr nastavit na NULL,

    base je číselná soustava, na výběr je soustava dvojková až šestatřicátá.

    Funkce strtol() vrací číselnou hodnotu převáděného řetězce. Dojde-li k přetečení nebo podtečení vrací symbolickou konstantu LONG_MAX, resp. LONG_MIN a zároveň je do proměnné errno přiřazena hodnota symbolické konstanty ERANGE.

    Funkce atol(), atoi() a atof() jsou zastaralé a nebezpečné, jelikož umožňují přetečení čísla.


    Funkce nanosleep() pozastaví spuštěný program. Funkce se nachází v hlavičkovém souboru time.h a není součástí standardní knihovny.
    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.

    Hodnota tv_nsec musí být mezi 0 a 999999999.

    (Nanosekunda je miliardtina sekundy.)

    Pokud se spokojíme s pauzou v rozmezí sekund, můžeme použít funkci sleep(), která se nachází v hlavičkovém souboru unistd.h, její použití je méně komplikované.
    sleep(5); 	/* pauza 5 sekund */

    Následuje ukázka, jak funkce strtol() a nanosleep() použít. Program načítá celá čísla z klávesnice. Číslo je načteno jako řetězec a převedeno na typ int long pomocí funkce strtol(). Funkce estrtol() kontroluje, zda řetězec s číslem neobsahuje nečíselné znaky, zda nedošlo k přetečení nebo podtečení a zda nebyl odentrován prázdný řetězec. Po stisknutí CTR-D funkce fgets() načte symbolickou konstantu EOF (end of line) a fgets() vrátí NULL, čímž se ukončí načítání z klávesnice. Program poté čísla srovná a každé číslo vypíše s půlsekundovou prodlevou.
    #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);	
    	}
    }
           

    Hodnocení: 50 %

            špatnédobré        

    Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

    Komentáře

    Vložit další komentář

    28.3. 21:50 pc2005 | skóre: 34 | blog: GardenOfEdenConfiguration | liberec
    Rozbalit Rozbalit vše Re: Funkce strtol a nanosleep (jazyk C)
    long int strtol(const char *str, char **endptr, int base)
    Proč vlastně?
    Chuck Norris řekl babičce, že si dá jen 3 knedlíky. A dostal 3 knedlíky. | 帮帮我,我被锁在中国房
    28.3. 22:02 Michal Kubeček | skóre: 71 | Luštěnice
    Rozbalit Rozbalit vše Re: Funkce strtol a nanosleep (jazyk C)
    Funkce nepotřebuje ten string měnit, takže není důvod tam 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.
    28.3. 23:13 pc2005 | skóre: 34 | blog: GardenOfEdenConfiguration | liberec
    Rozbalit Rozbalit vše Re: Funkce strtol a nanosleep (jazyk C)
    Aha divný já měl pocit že mě jednou gcc varovalo že vyžaduje const char * ...
    Chuck Norris řekl babičce, že si dá jen 3 knedlíky. A dostal 3 knedlíky. | 帮帮我,我被锁在中国房
    28.3. 22:29 dev
    Rozbalit Rozbalit vše Re: Funkce strtol a nanosleep (jazyk C)
    ze slušnosti.
    Bedňa avatar 28.3. 23:07 Bedňa | skóre: 33 | blog: Žumpa | Horňany
    Rozbalit Rozbalit vše Re: Funkce strtol a nanosleep (jazyk C)
    Je otázka či o toto ešte niekto v 21stročí stojí :)
    Pokecajte si s umelou stupiditou na http://www.kernelultras.org/
    29.3. 11:31 Jardík
    Rozbalit Rozbalit vše Re: Funkce strtol a nanosleep (jazyk C)
    U funkce strtol (a příbuzných) je dobré zmínit, že pro správnou detekci selhání je před voláním funkce potřeba nastavit ručně 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.
    29.3. 11:36 Jardík
    Rozbalit Rozbalit vše Re: Funkce strtol a nanosleep (jazyk C)
    Vidím, že v kódu errno na nulu nastavuješ, stálo by ale za to zmínit to v zápisu.
    Josef Kufner avatar 31.3. 17:45 Josef Kufner | skóre: 67
    Rozbalit Rozbalit vše Re: Funkce strtol a nanosleep (jazyk C)
    Koukni na http://cppreference.com/ a na manuálové stránky (man 3 strtol).
    Hello world ! Segmentation fault (core dumped)
    6.4. 11:25 Dušan Kreheľ | skóre: 9 | blog: krehel_sk___informovat_o_novych_verziach_softveru | Prešov
    Rozbalit Rozbalit vše Re: Funkce strtol a nanosleep (jazyk C)
    A čo tak skôr použiť int usleep(useconds_t usec) z unistd.h?
    6.4. 12:38 sad
    Rozbalit Rozbalit vše Re: Funkce strtol a nanosleep (jazyk C)
    Tato funkce je zastaralá.
    11.4. 20:54 Dušan Kreheľ | skóre: 9 | blog: krehel_sk___informovat_o_novych_verziach_softveru | Prešov
    Rozbalit Rozbalit vše Re: Funkce strtol a nanosleep (jazyk C)
    Kto povedal? Prečo? ... V unistd.h je stále.
    12.4. 08:58 sad
    Rozbalit Rozbalit vše Re: Funkce strtol a nanosleep (jazyk C)
    Tak píšou to zde.
    6.4. 13:36 Dušan Kreheľ | skóre: 9 | blog: krehel_sk___informovat_o_novych_verziach_softveru | Prešov
    Rozbalit Rozbalit vše Re: Funkce strtol a nanosleep (jazyk C)
    Štruktúru NUMBERS radšej definuj ako numbers_t. Rob radšej tak. Ak nechapeš, začni čítať iné kody a zmeniš možno názor.

    A nedefinuj takto:
    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í.
    6.4. 13:56 sad
    Rozbalit Rozbalit vše Re: Funkce strtol a nanosleep (jazyk C)
    Díky za tipy.
    6.4. 14:11 Dušan Kreheľ | skóre: 9 | blog: krehel_sk___informovat_o_novych_verziach_softveru | Prešov
    Rozbalit Rozbalit vše Re: Funkce strtol a nanosleep (jazyk C)
    "Polymorfizmus" void používaj, keď je potrebné. V Tvojom prípade nie je nutné.
    6.4. 14:16 Dušan Kreheľ | skóre: 9 | blog: krehel_sk___informovat_o_novych_verziach_softveru | Prešov
    Rozbalit Rozbalit vše Re: Funkce strtol a nanosleep (jazyk C)
    Ako pre int cmp(const void *p1, const void *p2).

    Založit nové vláknoNahoru

    ISSN 1214-1267   www.czech-server.cz
    © 1999-2015 Nitemedia s. r. o. Všechna práva vyhrazena.