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í
×
eParkomat, startup z ČR, postoupil mezi finalisty evropského akcelerátoru ChallengeUp!
Robot na pivo mu otevřel dveře k opravdovému byznysu
Internet věcí: Propojený svět? Už se to blíží...
dnes 13:30 | Zajímavý software

Byly uvolněny zdrojové kódy známé rogue-like hry DoomRL. Počátky hry jsou v roce 2002. Je napsána ve FreePascalu a zdrojový kód je nyní k dispozici na GitHubu pod licencí GNU GPL 2.0. Autor pracuje na nové hře Jupiter Hell, která je moderním nástupcem DoomRL a na jejíž vývoj shání peníze prostřednictvím Kickstarteru.

Blaazen | Komentářů: 0
dnes 13:15 | Pozvánky

Přijďte s námi oslavit vydání Fedory 25. Na programu budou přednášky o novinkách, diskuse, neřízený networking atd. Release Party se bude konat 16. prosince v prostorách společnosti Etnetera. Na party budou volně k dispozici také propagační materiály, nová DVD s Fedorou 25 a samozřejmě občerstvení. Přednášky budou probíhat v češtině. Pro více informací se můžete podívat na web MojeFedora.cz. Jen připomínám, že tentokrát jsme zavedli

… více »
frantisekz | Komentářů: 0
včera 16:38 | Komunita

Byly zveřejněny videozáznamy přednášek a workshopů z letošní konference OpenAlt konané 5. a 6. listopadu v Brně. K videozáznamům lze přistupovat ze stránky na SuperLectures nebo přes program konference, detaily o vybrané přednášce nebo workshopu a dále kliknutím na ikonku filmového pásu. Celkově bylo zpracováno 65 hodin z 89 přednášek a workshopů.

Ladislav Hagara | Komentářů: 0
včera 11:30 | Komunita

Bylo oznámeno, že bude proveden bezpečnostní audit zdrojových kódů open source softwaru pro implementaci virtuálních privátních sítí OpenVPN. Audit provede Matthew D. Green (blog), uznávaný kryptolog a profesor na Univerzitě Johnse Hopkinse. Auditována bude verze 2.4 (aktuálně RC 1, stabilní verze je 2.3.14). Audit bude financován společností Private Internet Access [reddit].

Ladislav Hagara | Komentářů: 4
včera 06:00 | Komunita

Na YouTube byl publikován Blender Institute Reel 2016, ani ne dvouminutový sestřih z filmů, které vznikly za posledních 10 let díky Blender Institutu. V institutu aktuálně pracují na novém filmu Agent 327. Dění kolem filmu lze sledovat na Blender Cloudu. Videoukázka Agenta 327 z června letošního roku na YouTube.

Ladislav Hagara | Komentářů: 0
včera 01:02 | Zajímavý článek

Minulý týden byly vydány verze 1.2.3 a 1.1.7 webového poštovního klienta Roundcube. V oznámení o vydání bylo zmíněno řešení bezpečnostního problému nalezeného společností RIPS a souvisejícího s voláním funkce mail() v PHP. Tento týden byly zveřejněny podrobnosti. Útočník mohl pomocí speciálně připraveného emailu spustit na serveru libovolný příkaz. Stejně, jak je popsáno v článku Exploit PHP’s mail() to get remote code execution z roku 2014.

Ladislav Hagara | Komentářů: 1
8.12. 16:00 | Nová verze

Byla vydána verze 0.98 svobodného nelineárního video editoru Pitivi. Z novinek lze zmínit například přizpůsobitelné klávesové zkratky. Videoukázka práce s nejnovější verzí Pitivi na YouTube.

Ladislav Hagara | Komentářů: 1
8.12. 15:00 | Zajímavý software

Stop motion je technika animace, při níž je reálný objekt mezi jednotlivými snímky ručně upravován a posouván o malé úseky, tak aby po spojení vyvolala animace dojem spojitosti. Jaký software lze pro stop motion použít na Linuxu? Článek na OMG! Ubuntu! představuje Heron Animation. Ten bohužel podporuje pouze webové kamery. Podpora digitálních zrcadlovek je začleněna například v programu qStopMotion.

Ladislav Hagara | Komentářů: 5
7.12. 21:21 | Nová verze Ladislav Hagara | Komentářů: 0
7.12. 11:44 | Zajímavý projekt

Na Indiegogo byla spuštěna kampaň na podporu herní mini konzole a multimediálního centra RetroEngine Sigma od Doyodo. Předobjednat ji lze již od 49 dolarů. Požadovaná částka 20 000 dolarů byla překonána již 6 krát. Majitelé mini konzole si budou moci zahrát hry pro Atari VCS 2600, Sega Genesis nebo NES. Předinstalováno bude multimediální centrum Kodi.

Ladislav Hagara | Komentářů: 2
Kolik máte dat ve svém domovském adresáři na svém primárním osobním počítači?
 (32%)
 (24%)
 (29%)
 (7%)
 (5%)
 (3%)
Celkem 808 hlasů
 Komentářů: 50, poslední 29.11. 15:50
Rozcestník
Reklama

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: 223×

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: 66
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: 66
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: 66
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: 66
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: 79 | 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: 66
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: 79 | 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: 66
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 MarSarK | skóre: 23 | blog: marsark_linux | Praha
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 :-)
Even a small adventure could be a beginning of a great journey.
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.