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 17:11 | Komunita

Byl proveden bezpečnostní audit svobodného IMAP a POP3 serveru Dovecot (Wikipedie). Audit byl zaplacen z programu Mozilla Secure Open Source a provedla jej společnost Cure53. Společnost Cure53 byla velice spokojena s kvalitou zdrojových kódu. V závěrečné zprávě (pdf) jsou zmíněny pouze 3 drobné a v upstreamu již opravené bezpečnostní chyby.

Ladislav Hagara | Komentářů: 0
včera 15:30 | IT novinky

Nadace Raspberry Pi představila na svém blogu Raspberry Pi Compute Module 3 (CM3 a CM3L), tj. zmenšené Raspberry Pi vhodné nejenom pro průmyslové využití. Jedná se o nástupce Raspberry Pi Compute Module (CM1) představeného v dubnu 2014. Nový CM3 vychází z Raspberry Pi 3 a má tedy dvakrát více paměti a desetkrát větší výkon než CM1. Verze CM3L (Lite) je dodávána bez 4 GB eMMC flash paměti. Uživatel si může připojit svou vlastní. Představena byla

… více »
Ladislav Hagara | Komentářů: 0
včera 01:23 | Nová verze

Oficiálně bylo oznámeno vydání verze 3.0 multiplatformního balíku svobodných kancelářských a grafických aplikací Calligra (Wikipedie). Větev 3 je postavena na KDE Frameworks 5 a Qt 5. Krita se osamostatnila. Z balíku byly dále odstraněny aplikace Author, Brainstorm, Flow a Stage. U Flow a Stage se předpokládá jejich návrat v některé z budoucích verzí Calligry.

Ladislav Hagara | Komentářů: 5
15.1. 15:25 | Nová verze

Bylo oznámeno vydání první RC (release candidate) verze instalátoru pro Debian 9 s kódovým názvem Stretch. Odloženo bylo sloučení /usr jako výchozí nastavení v debootstrap. Vydán byl také Debian 8.7, tj. sedmá opravná verze Debianu 8 s kódovým názvem Jessie.

Ladislav Hagara | Komentářů: 6
15.1. 13:37 | Zajímavý projekt

1. ledna byl představen projekt Liri (GitHub). Jedná se o spojení projektů Hawaii, Papyros a původního projektu Liri s cílem vyvíjet operační systém (linuxovou distribuci) a aplikace s moderním designem a funkcemi. Včera byl představen Fluid 0.9.0 a také Vibe 0.9.0. Jedná se o toolkit a knihovnu pro vývoj multiplatformních a responzivních aplikací podporující Material Design (Wikipedie) a volitelně také Microsoft Design Language (designový jazyk Microsoft) [reddit].

Ladislav Hagara | Komentářů: 5
14.1. 00:33 | Zajímavý software

Google na svém blogu věnovaném open source představil knihovnu pro komprimaci a dekomprimaci 3D grafiky s názvem Draco. Knihovna bude využívána například v aplikacích pro virtuální a rozšířenou realitu. Porovnání Draco s gzip na YouTube. Zdrojové kódy Draco jsou k dispozici na GitHubu pod licencí Apache 2.0.

Ladislav Hagara | Komentářů: 5
13.1. 17:27 | IT novinky

V loňském roce proběhla úspěšná kampaň na Indiegogo na podporu GPD Win. Jedná se o malý 5,5 palcový notebook a přenosnou herní konzoli v jednom. Předinstalované Windows 10 lze nahradit Linuxem. V únoru by se na Indiegogo měla objevit kampaň na podporu 7 palcového notebooku GPD Pocket.

Ladislav Hagara | Komentářů: 32
13.1. 02:00 | Nová verze

Po pěti měsících od vydání verze 1.0.0 (zprávička) byla vydána verze 2.0.0 frameworku Kirigami (HIG) pro vytváření uživatelských rozhraní mobilních a konvergentních aplikací nad toolkitem Qt. Pro vyzkoušení je určena aplikace pro Android Kirigami gallery.

Ladislav Hagara | Komentářů: 0
12.1. 23:28 | Zajímavý software

Akční hra Lugaru HD od Wolfire Games (recenze) byla uvolněna jako svobodný software, a to včetně dat (pod licencí Creative Commons Attribution – Share Alike). Linuxový port byl v roce 2010 součástí první akce Humble Indie Bundle a engine byl krátce poté uvolněn pod licencí GNU GPL, což vedlo mj. k portu na AmigaOS. Autor mezitím pracuje na pokračování nazvaném Overgrowth.

Fluttershy, yay! | Komentářů: 0
12.1. 14:49 | Bezpečnostní upozornění

Na serveru Jabb.im bylo zveřejněno vyjádření k úniku dat z Jabbim Archive (pastebin). Dump databáze obsahuje komunikaci uživatelů, jejich IP adresy a logy aplikace od října 2015 do března 2016. Celkově se jedná o 8 GB dat, převažujícím jazykem zpráv je čeština a slovenština. O úniku informoval jako první server Motherboard. Jabbim Archive byla službou volitelnou, dostupnou pouze pro VIP uživatele. Podle provozovatele serveru Jabb.im k

… více »
Michal Makovec | Komentářů: 68
Jak se stavíte k trendu ztenčování přenosných zařízení (smartphony, notebooky)?
 (10%)
 (2%)
 (74%)
 (3%)
 (10%)
Celkem 297 hlasů
 Komentářů: 21, poslední dnes 02:01
    Rozcestník
    Reklama

    Dotaz: getch() a linux

    14.11.2006 22:59 tomas
    getch() a linux
    Přečteno: 1875×
    Ahoj. Viem ze to tu uz bolo spominane, ale s tych clankov som to nepochopil. neviete niekto aka je pod pod linuxom funkcia v C nieco ako je v win funkcia getch() ?

    Odpovědi

    14.11.2006 23:03 Messa | skóre: 39 | blog: Messa
    Rozbalit Rozbalit vše Re: getch() a linux
    Co dělá getch()?
    14.11.2006 23:18 pasmen | skóre: 45 | blog: glob | Praha
    Rozbalit Rozbalit vše Re: getch() a linux
    Tady je popis.
    14.11.2006 23:04 Michal Kubeček | skóre: 71 | Luštěnice
    Rozbalit Rozbalit vše Re: getch() a linux
    Těžko říct, záleží na tom, co znamená "nieco ako je v win funkcia getch()" (hint: raději napište, co má dělat). Nějaká funkce getch() je např. v ncurses.
    14.11.2006 23:15 tomas
    Rozbalit Rozbalit vše Re: getch() a linux
    no napr ked stlacim klaves 'a' tak to ma vyvolat polozku v menu bez nutnosti stlacenia klavesy enter
    14.11.2006 23:17 Michal Kubeček | skóre: 71 | Luštěnice
    Rozbalit Rozbalit vše Re: getch() a linux
    V jakém menu? Jestli to chápu dobře, pak ncurses jsou asi právě tím, co hledáte.
    14.11.2006 23:20 pasmen | skóre: 45 | blog: glob | Praha
    Rozbalit Rozbalit vše Re: getch() a linux
    getc() (viz. man 3 getc)
    14.11.2006 23:31 tomas
    Rozbalit Rozbalit vše Re: getch() a linux
    tak ze takto
    switch (getch()){
                   case 'a' : vypis();
                     break;
                 }
    tak ze v dose ked stlacim klaves a, tak sa mi tato funkcia vypis hned vyvola, bez toho aby som zadaval za 'a' este 'enter'
    Josef Kufner avatar 15.11.2006 00:26 Josef Kufner | skóre: 66
    Rozbalit Rozbalit vše Re: getch() a linux
    To co chceš je knihovna ncurses pomocí které vypneš bufferování na terminálu a pak budeš volat to getch, které v té knihovně je. Není to nijak složité a vyšel tu o tom seriál.
    Hello world ! Segmentation fault (core dumped)
    15.11.2006 01:54 tomas
    Rozbalit Rozbalit vše Re: getch() a linux
    a mozes mi napisat prosim link na ten serial, alebo to napisat ako to spravit?
    Josef Kufner avatar 16.11.2006 08:21 Josef Kufner | skóre: 66
    Rozbalit Rozbalit vše Re: getch() a linux
    Aha, tak seriál není. Nojo. Takže man nodelay. Mělo by stačit něco takového:
    initscr();
    nodelay();
    getch();
    
    Hello world ! Segmentation fault (core dumped)
    15.11.2006 08:56 podlesh | skóre: 38 | Praha
    Rozbalit Rozbalit vše Re: getch() a linux
    Ještě bych doplnil: přenastavování chování stadardního vstupu/výstupu lze samozřejmě dělat i bez (n)curses, ale bude to hodně složité a málo přenositelné.
    15.11.2006 10:45 tomas
    Rozbalit Rozbalit vše Re: getch() a linux
    moze mi tu niekto napisat ako by vyzral potom tento kuskodu
    switch (getch()){
                   case 'a' : vypis();
                     break;
                 }
    16.11.2006 00:01 tomas
    Rozbalit Rozbalit vše Re: getch() a linux
    niek nevie ?
    16.11.2006 08:37 rastos | skóre: 60 | blog: rastos
    Rozbalit Rozbalit vše Re: getch() a linux
    
    	initscr();
    	cbreak();
    	switch(getch())
    	{
    		case 'a': printf("hallo");
    			break;
    	}
    
    16.11.2006 22:40 Petr Šobáň | skóre: 79 | blog: soban | Olomouc
    Rozbalit Rozbalit vše Re: getch() a linux
    Čili nějak takto:
    
    #include <ncurses.h>
    int main()
    {
        initscr();
        cbreak ();
        noecho (); 
        switch(getch())
    	{
    		case 'a': printfw("hallo"); 
                            refresh();
    			break;
    	}
        
        endwin();
        return 0;
    }
    16.11.2006 12:55 tomas
    Rozbalit Rozbalit vše Re: getch() a linux
    vypise mi to ze
    /tmp/ccVbJu1B.o: In function `main':
    1.c:(.text+0x573): undefined reference to `initscr'
    1.c:(.text+0x578): undefined reference to `cbreak'
    1.c:(.text+0x57d): undefined reference to `stdscr'
    1.c:(.text+0x585): undefined reference to `wgetch'
    collect2: ld returned 1 exit status
    16.11.2006 13:53 rastos | skóre: 60 | blog: rastos
    Rozbalit Rozbalit vše Re: getch() a linux
    Chýba ti prepínač linkera -lcurses
    16.11.2006 21:53 tomas
    Rozbalit Rozbalit vše Re: getch() a linux
    tak toto mi sice skompilovalo, ale zato sa mi nic nezobrazi, ziadne menu programu. a navyse ked program nasilne ukoncim skratkou ctrl+c tak na konzolu sa neda nic pisat!
    16.11.2006 22:32 Petr Šobáň | skóre: 79 | blog: soban | Olomouc
    Rozbalit Rozbalit vše Re: getch() a linux
    Jednoduše při ukončení to zase musíš vrátit do pořádku :-)

    1.) Skus okno obnovit pomocí refresh ();

    2.) Po ukončení musíš zrušit ncurses endwin ();

    Příklad:
    #include <curses.h>             /* stdio.h neni nutne je v curses.h */
    #include <ctype.h>
    
    #define COLOR2      1            /* barvicka 1. */
    #define COLOR1      2            /* barvicka 2. */
    
    int main () {
       int      c;
       char      *s;
    
       initscr ();            
       cbreak ();
       noecho ();                  /* vypnuti echa */
       start_color ();                  /* chceme barvy */
       keypad (stdscr, TRUE);            /* chceme klavesy pod makry KEY_neco */
       curs_set(0);                  /* at tam ta mrska neblika */
    
       if (!has_colors ()) {            /* umi terminal barvy ? */
           endwin ();
           fputs ("Hmm.. tady barvy nejdou !", stderr); 
           exit (1);
       }
       /*         barva - popredi   -       pozadi            */ 
       init_pair (COLOR1, COLOR_RED,       COLOR_BLUE);      /* barvicka 1. */
       init_pair (COLOR2, COLOR_YELLOW, COLOR_BLACK);      /* a druha */
    
       attron (COLOR_PAIR( COLOR1 ));                  /* pouzivat barvu 1. */
       mvaddstr (2, 5, "Cervene na modrem");
    
       attron (COLOR_PAIR( COLOR2 ));
       mvaddstr (3, 5, "Zlute na cernem");
    
       attron (A_BOLD);                        /* od ted vse BOLD */
       mvaddstr (4, 5, "Zlute na cernem a tucne");
    
       attroff (COLOR_PAIR( COLOR2 ));                  /* vypne barvu */
       mvhline(LINES-2, 0, ACS_HLINE, COLS);            /* nakresli caru */
       mvaddstr (LINES-1, COLS-15, "F10 - konec");
       mvaddstr (10, 5, "Jmeno klavesy:");
    
       while ( (c=getch()) != KEY_F(10)) {
               s = (char *) keyname(c);            /* jmeno klavesy ? */
               mvhline(10, 20, ' ', COLS);            /* smaz */
               if (s)
                     mvprintw (10, 20, "'%s'", s);
               else       
                     mvprintw (10, 20, "'%c'", (isprint(c) ? c : '.'));
       }
       erase ();                        /* smaz nase vytvory */      
       refresh ();                        
       endwin ();                        /* konec curses */
       exit (0);                        /* ....bye */
    }
    
    
    Josef Kufner avatar 16.11.2006 22:51 Josef Kufner | skóre: 66
    Rozbalit Rozbalit vše Re: getch() a linux
    Při překladu doporučuju používat -Wall. Pak se nezapomene na #include <stdlib.h> ;-)
    Hello world ! Segmentation fault (core dumped)
    Josef Kufner avatar 16.11.2006 22:47 Josef Kufner | skóre: 66
    Rozbalit Rozbalit vše Re: getch() a linux
    initscr();
    atexit((void(*)(void))endwin);
    cbreak();
    refresh();
    switch(getch())
    {
    	case 'a':
    		printw("hallo");
    		sleep(1);
    		break;
    }
    ... nakonec je potřeba zavolat endwin(), jinak ti to nenavrátí terminál do původního stavu. Na psaní a kreslení je potřeba pak používat funkce z knihovny ncurses (např. printw() místo printf()).
    Hello world ! Segmentation fault (core dumped)
    16.11.2006 22:54 tomas
    Rozbalit Rozbalit vše Re: getch() a linux
    tak ze spravil som to takto
    int main(void){
    	int *p_pole = NULL;
    	initscr();
    	atexit((void(*)(void))endwin);
    	cbreak();
    	refresh();
    	
    	while (1){
    		printf("\tmenu\n1. obrazok\n2. vypis\n3. vypocitaj\n4. nacitaj hodnoty\n5. usporiadaj\n6. koniec");
        		printf("\n\nzadajte svoju volbu > ");
        		
        		switch (getch()){
          			case '1' : system("clear"); obrazok();
            			break;
          			case '2' : system("clear"); vypis();
          				break;
          			case '3' : system("clear"); vypocitaj();
          				break;
          			case '4' : system("clear"); nacitaj_hodnoty(&p_pole);
          				break;
          			case '5' : system("clear"); usporiadaj(p_pole);
          				break;
          			case '6' : return 0;
        		}
        		//system("clear");
      	}
      	endwin();
    }
    a po spusteni programu je cista obrazovka
    16.11.2006 23:01 Petr Šobáň | skóre: 79 | blog: soban | Olomouc
    Rozbalit Rozbalit vše Re: getch() a linux
    Musí obnovit obrazovku :-) po výpisu.

    refresh();
    16.11.2006 23:03 Petr Šobáň | skóre: 79 | blog: soban | Olomouc
    Rozbalit Rozbalit vše Re: getch() a linux
    A ještě jsem zapoměl pro výstup použít printw(); :-) a né printf :-)
    Josef Kufner avatar 16.11.2006 23:02 Josef Kufner | skóre: 66
    Rozbalit Rozbalit vše Re: getch() a linux
    Kdyz na ni nic nenakreslis... printf() => printw()
    system("clear") => clear() ...a jakmile nakreslis vsecko, tak refresh().
    Hello world ! Segmentation fault (core dumped)
    16.11.2006 23:27 tomas
    Rozbalit Rozbalit vše Re: getch() a linux
    a nieaka ina funkcia v nieakej inej kniznici nieje? taka aby som mohol pouzivat funkcie zo stdio.h!
    Josef Kufner avatar 16.11.2006 23:30 Josef Kufner | skóre: 66
    Rozbalit Rozbalit vše Re: getch() a linux
    man 3 termios ;-)
    Hello world ! Segmentation fault (core dumped)
    Josef Kufner avatar 16.11.2006 23:37 Josef Kufner | skóre: 66
    Rozbalit Rozbalit vše Re: getch() a linux
    #include <stdio.h>
    #include <termios.h>
     
    int main (void) {
    	struct termios term;
            tcgetattr(0, &term);
            term.c_lflag &= ~ICANON;
            tcsetattr(0, TCSANOW, &term);
            setbuf(stdin, NULL);
    	printf("Press any key to continue...\n");
    	getc(stdin);
    	return 0;
    }
    Hello world ! Segmentation fault (core dumped)
    Josef Kufner avatar 16.11.2006 23:39 Josef Kufner | skóre: 66
    Rozbalit Rozbalit vše Re: getch() a linux
    Jo, ještě pak je dobré to bufferování zase zapnout. Podrobnosti tu.
    Hello world ! Segmentation fault (core dumped)
    Bluebear avatar 16.11.2006 23:50 Bluebear | skóre: 30 | blog: Bluebearův samožerblog | Praha
    Rozbalit Rozbalit vše Re: getch() a linux
    Pokud v terminálu vypneš bufferování řádků (za normálních okolností terminál nejdřív přečte celou řádku až po enter a teprve potom ji odešle ke zpracování), měla by funkce getc() vracet znak okamžitě poté, co je napsán.

    No... aspoň doufám, že to tak nějak je.

    Ale opravdu bude myslím jednodušší použít knihovnu ncurses. Mrkni na tenhle howto, tam by měla být popsána většina věcí.

    Pokud bys trval na tom to mít v čistém Cčku bez použití externích knihoven, musel bys napsat nějakou takovouhle hrůzu - POZOR, NEZKOUŠEL JSEM TO, JE TO JEN NÁVRH!
        // Přečti nastavení terminálu.
        struct termios terminal_settings, original_terminal_settings;
        if (tcgetattr(input_fd, &terminal_settings) != 0) {
            perror("could not read terminal settings");
            return false;
        }
    
        // Zapamatuj si je, aby je šlo obnovit na konci programu.
        original_terminal_settings = new struct termios;
        memcpy(
            original_terminal_settings,
            &terminal_settings,
            sizeof(struct termios)
        );
    
        // Nová nastavení terminálu.
        terminal_settings.c_iflag &= ~(IGNBRK | BRKINT | PARMRK | ISTRIP
                        | INLCR | IGNCR | ICRNL | IXON);
        terminal_settings.c_oflag &= ~OPOST;
        terminal_settings.c_oflag |= ONLCR;     // Překlad LF -> CRLF.
        terminal_settings.c_lflag &= ~ECHO;     // Nevypisovat stisknuté klávesy.
        terminal_settings.c_lflag &= ~ECHONL;   // Nevypisovat klávesu Enter.
        terminal_settings.c_lflag &= ~ICANON;   // Vypnout kanonický režim.
        terminal_settings.c_lflag &= ~IEXTEN;   // Vypnout rozšířené zpracování znaků.
        terminal_settings.c_cflag &= ~PARENB;   // Žádná parita.
        terminal_settings.c_cflag &= ~CSIZE;
        terminal_settings.c_cflag |= CS8;       // Osmibitové znaky.
    
        // Pošli změněná nastavení do terminálu.
        if (tcsetattr(input_fd, TCSADRAIN, &terminal_settings) != 0) {
            perror("could not change terminal settings");
            return false;
        }
    
    Ale pokud budeš chtít kreslit menu, tak musíš ještě řídit pohyb kurzoru, barvy, atd., to znamená posílat správné řídící sekvence (jejich seznam najdeš například zde), a to bude taky slušné maso :-(
    To mi připomíná, jak jsem si pořídil květináč, že v něm budu mít květinu. Opravdu tam byla, ale potom být přestala...

    Založit nové vláknoNahoru

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

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