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í
×

    dnes 15:22 | IT novinky

    Ve věku 91 let zemřel izraelský informatik Ja'akov Ziv, spolutvůrce bezztrátových kompresních algoritmů LZ77, LZ78 a LZW (Lempel–Ziv–Welch).

    Ladislav Hagara | Komentářů: 0
    dnes 11:00 | IT novinky

    Byla představena nová Arduino deska Arduino UNO R4 s 32bitovým MCU RA4M1 (Arm Cortex-M4). Desku lze zatím získat pouze v rámci early access programu.

    Ladislav Hagara | Komentářů: 0
    včera 18:33 | Nová verze

    Operační systém MidnightBSD, fork FreeBSD optimalizovaný pro desktop s prostředím Xfce, byl vydán ve verzi 3.0. Přehled novinek v poznámkách k vydání.

    Ladislav Hagara | Komentářů: 4
    včera 18:22 | IT novinky

    Na GOG.com běží Spring Sale. Při té příležitosti lze získat zdarma počítačovou hru Neurodeck: Psychological Deckbuilder (ProtonDB).

    Ladislav Hagara | Komentářů: 0
    25.3. 12:33 | Komunita

    Alex Ellis upozornil 15. března, že firma Docker se chystala zrušit bezplatný hosting open-source projektů na Docker Hubu. Po vlně odporu se představitelé firmy omluvili a posléze byl původní záměr odvolán.

    Fluttershy, yay! | Komentářů: 29
    25.3. 07:00 | IT novinky

    Ve věku 94 let zemřel Gordon Moore, mj. spoluzakladatel společnosti Intel a autor Moorova zákona.

    Ladislav Hagara | Komentářů: 1
    24.3. 17:11 | Nová verze

    Mercurial (Wikipedie), software pro SCM (Source Code Management), byl vydán ve verzi 6.4. Přehled novinek v poznámkách k vydání. Ve dnech 5. až 7. dubna proběhne konference Mercurial Paris.

    Ladislav Hagara | Komentářů: 0
    24.3. 11:55 | IT novinky

    Byly rozdány Ceny Velkého bratra (Big Brother Awards) za rok 2022 pro největší slídily pořádané nevládní organizací Iuridicum Remedium. Dlouhodobý slídil: Microsoft. Firemní slídil: Seznam. Úřední slídil: Nejvyšší správní soud. Výrok Velkého bratra: Marian Jurečka. Pozitivní cena: NoLog.

    Ladislav Hagara | Komentářů: 11
    24.3. 11:11 | Zajímavý projekt

    Byla představena online vzdělávací platforma Ada Computer Science pro učitele, studenty a kohokoli, kdo se zajímá o informatiku. Stojí za ní Raspberry Pi Foundation a Univerzita v Cambridgi.

    Ladislav Hagara | Komentářů: 0
    24.3. 09:11 | Bezpečnostní upozornění

    GitHub má nový RSA SSH klíč. Předchozí soukromý klíč byl krátce vystaven na GitHubu.

    Ladislav Hagara | Komentářů: 0
    Používáte WSL (Windows Subsystem for Linux)?
     (74%)
     (12%)
     (4%)
     (10%)
    Celkem 334 hlasů
     Komentářů: 4, poslední 24.3. 06:42
    Rozcestník


    Dotaz: Jak na dva terminaly, aby si navzajem posilaly data a i je vypisovaly

    21.4.2005 17:00 VytliNoha | skóre: 1
    Jak na dva terminaly, aby si navzajem posilaly data a i je vypisovaly
    Přečteno: 235×

    Zdravim mohl byste mi nekdo poradit jak se da resit programek v cecku abych si pri spusteni navolil v prikazove radce jaky pseudo terminal se bude pouzivat ( ptsX ). Program se pak propoji na dalsi pseudo terminal a navzajem si posilaji data.

    Presne zadani zde:

    ........................................

    Napište program, teletype. Tento program otevře sériový port a vyšle na něj každý z klávesnice zapsaný znak a vypíše každý jednotlivý znak ze sériové linky přijatý. Pomocí sériového kabelu propojte COM1 a COM2 a spusťte 2 instance programu teletype. Který COM se bude používat specifikujte z příkazové řádky při spouštění programu.

    ________________

    Vim jak udelat abych se propojil na terminal a cetl z nej znaky ale nevim jak udelat aby jsme mohl navzajem mezi terminali prijimat i odesilat. Snad pomoci fce select? Prosim poradte, ( nechci to naprogramovat, jen nakopnout), zatim je to pro me spanelska vesnice. Dekuji

    Odpovědi

    wake avatar 21.4.2005 17:37 wake | skóre: 30 | blog: wake | Praha
    Rozbalit Rozbalit vše Re: Jak na dva terminali aby si navzajem posilali data a aji je vypiso
    jeden thread v nekonecne smycce cte konsoli a posila to na pts, druhy thread v nekonecne smycce cte pts a posila to na konsoli. jeste musite vyresit interferenci konsole a vystupu (echo on/off), ale to uz necham na vas...

    btw. pozdravujte sveho ucitele programovani ;-)
    Tento příspěvek má hlavičku i patičku!
    21.4.2005 17:49 VytliNoha | skóre: 1
    Rozbalit Rozbalit vše Re: Jak na dva terminali aby si navzajem posilali data a aji je vypiso
    A nebude to mezi sebou delat bordel? Vsak v konzoli budu psat text ktery to bude posilat na druhy terminal a pritom ta moje konzole bude i ten text vypisovat. Kurna leda to omezit ze vse pujde na stridacku, 1. posle prijme a muze odeslat druhy zatim ceka. To by slo osetrit semaforem nebo mutexem.

    Jdu spravnym smerem?
    21.4.2005 18:53 m0rph
    Rozbalit Rozbalit vše Re: Jak na dva terminali aby si navzajem posilali data a aji je vypiso
    he? staci normalni cekaci smycka smycka se selectem, ktera periodicky provadi (neblokujici) cteni stdinu a toho portu, pokud se na nich neco objevi, coz vam rekne ten select. jeste se musi pomoci setbuf vypnout bufferovani stdinu a stdoutu, aby se data zpracovavala a zobrazovala hned a ne az po odradkovani.

    kdo chce na takovou blbinu pouzivat thready, at se vrati do windows.
    21.4.2005 19:09 VytliNoha | skóre: 1
    Rozbalit Rozbalit vše Re: Jak na dva terminali aby si navzajem posilali data a aji je vypiso
    No pro zacatecnika velke sousto pochopit vas prispevek. Ale snad to prelouskam kazdopadne jsem rad za kazdou radu.
    wake avatar 21.4.2005 19:11 wake | skóre: 30 | blog: wake | Praha
    Rozbalit Rozbalit vše Re: Jak na dva terminali aby si navzajem posilali data a aji je vypiso
    a proc _periodicky_ a proc _neblokujici_ ?
    Tento příspěvek má hlavičku i patičku!
    Josef Kufner avatar 21.4.2005 19:20 Josef Kufner | skóre: 70
    Rozbalit Rozbalit vše Re: Jak na dva terminali aby si navzajem posilali data a aji je vypiso
    Oboji je zbytecne.

    Kdysi jsem delal program, ktery propojil svuj stdin a stdout se sitovym soketem. Byl to jeden nekonecny cyklus se selectem. Vsechna cteni/zapisy byly blokujici a timeout selectu byl nekonecny. Program v klidu spinkal a kdyz prisla data, tak je sebral a prehodil kam patri. Pak jsem to pouzil na sitove hrani piskvorek ;)
    Hello world ! Segmentation fault (core dumped)
    21.4.2005 19:23 VytliNoha | skóre: 1
    Rozbalit Rozbalit vše Re: Jak na dva terminali aby si navzajem posilali data a aji je vypiso
    Nemohl bys mi konkretneji poradit jak na to, moc by mi to pomohlo.
    Josef Kufner avatar 21.4.2005 20:29 Josef Kufner | skóre: 70
    Rozbalit Rozbalit vše Re: Jak na dva terminali aby si navzajem posilali data a aji je vypiso
    Je to prakticky ucebnicove pouziti selectu. Dva vstupy - stdin a ten od druheho terminalu (treba socket) predane selectu a jinak nic.
    Hello world ! Segmentation fault (core dumped)
    Josef Kufner avatar 21.4.2005 20:31 Josef Kufner | skóre: 70
    Rozbalit Rozbalit vše Re: Jak na dva terminali aby si navzajem posilali data a aji je vypiso
    kdybys to chtel videt nekde pouzite, tak koukni treba na wmpiki
    Hello world ! Segmentation fault (core dumped)
    21.4.2005 20:48 VytliNoha | skóre: 1
    Rozbalit Rozbalit vše Re: Jak na dva terminali aby si navzajem posilali data a aji je vypiso
    Mohl bys ten tvuj ucebnicovy priklad napsat? Moc by mi pomohlo pochopit ten select. Dekuji!!
    21.4.2005 20:59 RWS
    Rozbalit Rozbalit vše Re: Jak na dva terminali aby si navzajem posilali data a aji je vypiso
    $ man 2 select

    dej tam navic 2 FD (stdin a ten serial) a nekonecnej cyklus a mas to
    EXAMPLE
           #include <stdio.h>
           #include <sys/time.h>
           #include <sys/types.h>
           #include <unistd.h>
    
           int
           main(void) {
               fd_set rfds;
               struct timeval tv;
               int retval;
    
               /* Watch stdin (fd 0) to see when it has input. */
               FD_ZERO(&rfds);
               FD_SET(0, &rfds);
               /* Wait up to five seconds. */
               tv.tv_sec = 5;
               tv.tv_usec = 0;
    
               retval = select(1, &rfds, NULL, NULL, &tv);
               /* Don't rely on the value of tv now! */
    
               if (retval == -1)
                perror("select()");
               else
               if (retval)
                   printf("Data is available now.\n");
                   /* FD_ISSET(0, &rfds) will be true. */
               else
                   printf("No data within five seconds.\n");
    
               return 0;
           }
    
    22.4.2005 08:09 VytliNoha | skóre: 1
    Rozbalit Rozbalit vše Re: Jak na dva terminali aby si navzajem posilali data a aji je vypiso
    Tak jsem to udelal takto, pri spusteni predavam parametr nazev terminalu na ktery ma preposilat vstup z klavesnice a z toho terminalu i cist a vypisovat to na vystup, jenomze kdyz program spustim tak vypisuje data ktere pisi na termilu ktery jsem uvedl pri spusteni ale kdyz pisu v tomto terminalu tak to zase nezbrazuje v terminalu kde jsem program spustil. V zadani mame ze mame spustit dve instance, ale to nejde protoze kdyz spustim program tak ten blokuje ten terminal z k tereho vypisuje text a uz nemuzu spusti dalsi instanci programu. Soucasni muj zdrojak, prosim poradte.
    #define BUF_LEN 200
    struct termios set_attributes;
              
    int main(int argc, char *argv[]) {
    	char *ttyID;
    	char buffer[BUF_LEN];
    	int result;	
        fd_set terminal, klavesnice;
        struct timeval timeout; /* Struktura s časovým limitem */
    	size_t len;
    
    
    	ttyID = argv[1]; /* Nacteme ttyID pseudo terminalu */
    	int tty = open(ttyID, O_RDWR);
    	
    	// nastav nove parametry terminalu
        tcgetattr(tty, &set_attributes);
        set_attributes.c_lflag &= ~ICANON; // necekej na cely radek (noncanonical)
        //set_attributes.c_lflag &= ~ECHO;   // nezobrazuj ctene znaky
        set_attributes.c_cc[VMIN] = 1;                                        
        set_attributes.c_cc[VTIME] = 0;
        tcsetattr(tty, TCSAFLUSH, &set_attributes);
    	
    	while(1){
    		FD_ZERO(&terminal); /* Odstranime nahodna data z mnoziny */
    		FD_ZERO(&klavesnice); /* Odstranime nahodna data z mnoziny */
    		FD_SET(fileno(stdin), &klavesnice); /* Naplnime mnozinu stdin */
    		FD_SET(tty, &terminal); /* Naplnime mnozinu ttyckem */
    		// Nadefinovany casovy interval 4 sekundy a 5 milis..
    		timeout.tv_sec = 4;
    		timeout.tv_usec = 50000;
    		
    		// Zavolám select (V Linuxu musím mít nastavenou proměnnou FD_SETSIZE) --- tezko rict co je na tom pravdy
    		result = select(FD_SETSIZE, &klavesnice, &terminal, NULL, &timeout);
    		switch(result){
    			case -1:
    				perror("select"); /* Nastala chyba */
    				exit(1);
    			case 0:
    				printf("timeout \n"); /* Vypršel časový limit */
    				break;
    			default:
    					  /* Obsluha soketu. Zde je možné vytvořit nové vlákno nebo proces,
    						který obslouží událost na soketu. Server pak je vícevláknový.
    						*/
    					if (FD_ISSET(fileno(stdin), &klavesnice)) {
    						/* Data available on stdin */
    						char a;
    						read(fileno(stdin), &a, sizeof(a));
    						write(tty, &a, sizeof(a)); 
    					}			
    					if (FD_ISSET(tty, &terminal)) {
    						char c;
    						read(tty, &c, sizeof(c));/*:!*/
    						if(c == '\004') { // `C-d'
    							// program skonci az prijme Ctrl-D
    							break;
    						}
    						else {
    							putchar(c);
    							// vyprazdni vystupni buffer
    							// a zpusob tak zobrazeni znaku
    							// i v nekanonickem modu terminalu
    							fflush(stdout); 
    						}
    					}
    				break;
    		}
    		
    	}
    }
    
    wake avatar 23.4.2005 21:20 wake | skóre: 30 | blog: wake | Praha
    Rozbalit Rozbalit vše Re: Jak na dva terminali aby si navzajem posilali data a aji je vypiso
    snad:
    .
    .
    .
    switch(select(1, &rfds, NULL, NULL, &tv))
    {
    case -1:
        perror("select()");
        return -1;
        /* no break */
    case 0:
        printf("No data in 5 sec.\n");
        break;
    default:
        printf("DAATAAA!!!.\n");
        /* FD_ISSET(0, &rfds) will be true. */
        break;
    }
    return 0;
    .
    .
    .
    
    ;-)
    Tento příspěvek má hlavičku i patičku!
    21.4.2005 20:00 VytliNoha | skóre: 1
    Rozbalit Rozbalit vše Re: Jak na dva terminali aby si navzajem posilali data a aji je vypiso
    Zatim k cemu jsem se dohrabal, program se spousti s parametrem z ktereho portu ma data tisknout na terminal
    
    hlavicky
    
    
    
    void *readFromTERMINAL( void *ptr )
    {
            char *terminal;
            terminal = (char *) ptr;
    		
    		int tty = open(terminal, O_RDONLY);/*:!*/
    		if(tty < 0) {
            	perror("ERROR open device /dev/ttyS1");
            	exit(EXIT_FAILURE);
        	}
    		
        	while(1) {
            	char c;
           	 	read(tty, &c, sizeof(c));
            	if(c == '\004') { // `C-d'
                	// program skonci az prijme Ctrl-D
                	close(tty);
    				break;
            	}
            	else {
                	putchar(c);
                	// vyprazdni vystupni buffer
                	// a zpusob tak zobrazeni znaku
                	// i v nekanonickem modu terminalu
                	fflush(stdout); 
            	}
        	}
        	close(tty);	
    		
    }
    
    
    int main(int argc, char *argv[])
    {
    	pthread_t thread1, thread2;
    	char *parametr;
    	parametr = argv[1];   
    	
    
        // vlakno cte z daneho portu a vypisuje na terminal
    	pthread_create( &thread1, NULL, readFromTERMINAL, parametr); 
        
        
    	pthread_join(thread1, NULL);
    	printf("\nKonec\n");
        return EXIT_SUCCESS;
    }
    
    Josef Kufner avatar 21.4.2005 20:30 Josef Kufner | skóre: 70
    Rozbalit Rozbalit vše Re: Jak na dva terminali aby si navzajem posilali data a aji je vypiso
    pouzivat na tohle vlakna je zvrhlost
    Hello world ! Segmentation fault (core dumped)
    21.4.2005 17:40 Petr Šobáň | skóre: 80 | blog: soban | Olomouc
    Rozbalit Rozbalit vše Re: Jak na dva terminali aby si navzajem posilali data a aji je vypiso
    Nějak jsem to nepochopil, ale ty com porty si normálně otevřu jako soubory akorát že mu zadám zařízení /dev/ttySx tak podobně i s těmy terminály by to mělo jít ne ? (/dev/pts/x )
    Josef Kufner avatar 21.4.2005 19:21 Josef Kufner | skóre: 70
    Rozbalit Rozbalit vše Re: Jak na dva terminali aby si navzajem posilali data a aji je vypiso
    terminal uz mas otevreny pri spusteni - stdin, stdout (a stderr).
    Hello world ! Segmentation fault (core dumped)
    21.4.2005 20:02 Petr Šobáň | skóre: 80 | blog: soban | Olomouc
    Rozbalit Rozbalit vše Re: Jak na dva terminali aby si navzajem posilali data a aji je vypiso
    To ano ale to je ten můj aktuální ale když to chci poslat na jiný terminál ?
    Josef Kufner avatar 21.4.2005 20:21 Josef Kufner | skóre: 70
    Rozbalit Rozbalit vše Re: Jak na dva terminali aby si navzajem posilali data a aji je vypiso
    screen to dela tak, ze si vytvori unixovy socket a k nemu se pak pripoji dalsi screen
    Hello world ! Segmentation fault (core dumped)
    wake avatar 22.4.2005 08:27 wake | skóre: 30 | blog: wake | Praha
    Rozbalit Rozbalit vše Re: Jak na dva terminali aby si navzajem posilali data a aji je vypiso
    presmerujes sipeckama pri volani ;)
    Tento příspěvek má hlavičku i patičku!
    22.4.2005 08:34 Pitrsonek
    Rozbalit Rozbalit vše Re: Jak na dva terminali aby si navzajem posilali data a aji je vypiso
    Mohl bys mi to ukazat nevim presne jak to myslis, v linuxu delam asi tak mesi a v cecku taky to jen proto ze musim .-) Jinak ten kod je napsany dobre, testoval si to? kdyztak moje ICQ: 114940710
    wake avatar 22.4.2005 10:23 wake | skóre: 30 | blog: wake | Praha
    Rozbalit Rozbalit vše Re: Jak na dva terminali aby si navzajem posilali data a aji je vypiso
    moje_skvela_utilita </dev/bagr/jahoda/konzole >/dev/bagr/jahoda/konzole
    Tento příspěvek má hlavičku i patičku!
    21.4.2005 22:34 SAM: | skóre: 23 | blog: marsark_linux
    Rozbalit Rozbalit vše Re: Jak na dva terminaly, aby si navzajem posilaly data a i je vypisov
    Hm, koukám to je zajímavý přístup k vypracování úlohy do školy. Jsem zvědav, jak ji budete odevzdávat svému cvičícímu :-)
    21.4.2005 23:03 VytliNoha | skóre: 1
    Rozbalit Rozbalit vše Re: Jak na dva terminaly, aby si navzajem posilaly data a i je vypisov
    Co se ti ( vam ) nezda na tom pristupu?

    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.