Титла: pechatane ot telnet ili ssh Публикувано от: mil_dim в Apr 12, 2002, 23:13 ;-) Hint, tova e pak za tebe ;-)
oste malko, i ste trebva da te naema na rabota, da znaesh ;-) znachi polzvame programa pisana na cobol , kojato bachka na linux server. vkluchvame se s telnet ili ssh. mashinite v localnata mreza nemat problem, pechatame na mrezovite printeri. ama ima mnogo mashini, koito sa v internet, i e dosta trudno i nesigurno da pechata servera na tehnite printeri. ako mashinkata e win, polzvame hyperterminal sas slave printer. no mashinkite ni pochti vsichki sa linux. ne mozahme da podkarame slave printer s telnet i ssh, zatova rabotim workaround. neshto podobno na tva mi beshe purvata idea telnet server.firma.com | tee /dev/tty1 | grep "@@@" | cut -c 4-40 > /dev/lp0 ideata e prosta - tova, koeto ste se pechata se prashta sas @@@ na vseki red v nachaloto. obache ne stava - cut a i koe da e podobno, bachka, chak sled kato se zatvori faila, t.e. vhoda - otpechatva vsichko, chak kato svurshi telnet-sesiata. a nie iskame, da si pechata v protsesa na rabota. znachi, do grep"@@@" bachka perfektno telnet server.firma.com | tee /dev/tty1 | grep "@@@" - telnet server.firma.com | tee /dev/tty1 | grep "@@@" > /file bachkat, a sledvashtite 2 - ne bachkat telnet server.firma.com | tee /dev/tty1 | grep "@@@" | cat telnet server.firma.com | tee /dev/tty1 | grep "@@@" | cat > /file iasnno mi e che problema e che ne se zatvara faila . pravih dosta opiti , sas tail, tail -f , bachka, no do purvata komanda. sega sam go napravil s edni mezdinni programi deto triat, rezat ;-) realichni programi ,bachka, no se gubat redove ponekoga. namislil sam seg ada si go pisha sam vsichko na C , neshto kato grep, kojto napravo pechata - za vseki red da si otvaram i zatvaram /dev/lp0 . ama ochakvam po gotini predlozenia i kod. i naj veche, kak moga vav shel da si rabota sas potok ot danni, bez da e neobhodim da go zatvaram. ne mi se polzva lpd , stoto neshto mnogo vreme mi gubi spoolinga, ponekoga 15 sec. a, tva e mnogo za sluchaja - tva e neshto kato POS , izdavat se edni biletcheta burzo i ne moze da se chaka Титла: pechatane ot telnet ili ssh Публикувано от: mil_dim в Apr 14, 2002, 03:26 znachi , sega go prava taka :
tail -f /var/buffile | printv & i go zaebavam tam ;-) ssh server | tee /dev/tty1 > /var/buffile stava i taka: ssh server | tee /dev/tty1 | printv ama loshoto e che kato svurshi ssh sesita printv ne svurshva - nema kraj purvia tsikal while. probvah da mu namera EOF, ama ne stava, mizeria, problemi, svurshva po-rano. nekakvi po dobri idei ? #tva e printv.c #include<stdio.h> main() { FILE *f; char a[80] ; int i=0,k ; while(1){ i=0; while ( ((a=getchar() )!=10)&&(i<80) )i++; if (i>3) if ( ( a[0]=='@' && ( a[1]=='@' && (a[2]=='@' )) { f=fopen("/dev/lp0","rw+"); for (k=3 ;k<i;k++ ) fprintf(f,"%c",a[k]); fprintf(f,"\n"); fclose(f); } } } Титла: pechatane ot telnet ili ssh Публикувано от: dam в Apr 15, 2002, 09:47 Може би проблемът е, че изходящият файл има буфер и го изпраща едва, когато го затвориш. Ако не е това проблема (долният код се държи по същия начин - печета чак накрая), сложи open и close в цикъла.
Ето ти парче на Perl:
Не съм пробвал кода, но трябва да свърши работа. Успех! Титла: pechatane ot telnet ili ssh Публикувано от: hint в Apr 15, 2002, 10:22 mislia 4e reshenieto s C programkata e naj-podhodiashto - 10 reda kod, ama si znaesh to4no kakvo pravi i kak go pravi
I az bih podhodil po sushtia na4in kum problema. Moje da ima i po-elegantno reshenie s bash, no shte si zagubish pove4e vreme v tursene. Титла: pechatane ot telnet ili ssh Публикувано от: dam в Apr 15, 2002, 10:42 Всъщност, проблемът на C-програмата е, че не усеща кога е дошъл края на файла. Така като я гледам в нея име една много често срещана грешка, която се допуска когато не знаеш точно какво става :-)
getchar връща резултат от тип int, а не char. Така че ще трябва да се проверява резултатът от getchar дали пък не е отрицателен, което е индикатора за край на файл. Не виждам нищо неясно в Perl-примера. Ако мога да разясня нещо - ще го направя. Титла: pechatane ot telnet ili ssh Публикувано от: mil_dim в Apr 15, 2002, 17:18 Dam, tochno tva mi e problema, che ne vizda kraja na faila
probvah da go diria, ama ne go namerih, sega ste provbam s otritsatelno. a i tva e samo purvata idea - nema nikakva proverka za greshki zasega ;-) ama e nuzna speshno za bachkane ... ta zatova burzo. sega ia zaebavam da varvi vav fonov rezim vinagi , i ne tursi kraj na fail. ne znam perl, ama imam zelanie da go ponaucha. ama s dia default variables napravo me ubiva ;-) ako mozesh nekolko komentara na programkata ti?pls Титла: pechatane ot telnet ili ssh Публикувано от: mil_dim в Apr 15, 2002, 17:33 znachi taka stana, i zasega e super.
eee, baja ima oste da cheta C;-) mersi mnogo. no vse pak me interesuvat i drugi idei, s tsel da naucha neshto poveche. sega ste napisha koda na perl za da vida kak e #include<stdio.h> main() { FILE *f; char a[80] ; int i=0,k,p=1 ; while(p){ i=0; while ( ((a=getchar() )!=10)&&(i<80) ) { p=a; if ( p<0 ) p=0 ;else p=1 ; i++; } if (i>3) if ( ( a[0]=='@' && ( a[1]=='@' && (a[2]=='@' )) { f=fopen("/dev/tty12","rw+"); for (k=3 ;k<i;k++ ) fprintf(f,"%c",a[k]); fprintf(f,"\n"); fclose(f); } } } Титла: pechatane ot telnet ili ssh Публикувано от: dam в Apr 15, 2002, 17:49 Така като го гледам ще работи ако char ти е signed тип. Ако не е - загиваш.
Сега нямам време, но утре ще ти пратя и коментирана версия на варианта на Perl. Титла: pechatane ot telnet ili ssh Публикувано от: hint в Apr 15, 2002, 17:58 po-dobre e da tursish simvol EOF, a ne "<0" - EOF se kodira s "-1"
smeni si cikula za 4etene na neshto podobno: while ( ((p=getchar() )!=10)&&(i<80) ) if( EOF == p ){ p=0; break; } else if(p>=0) a[i++]=p; Титла: pechatane ot telnet ili ssh Публикувано от: dam в Apr 15, 2002, 18:00 Все пак се оказа, че имам време:
За повече подробности `perldoc perlre', `perldoc perlop', `perldoc perlvar' Титла: pechatane ot telnet ili ssh Публикувано от: mil_dim в Apr 15, 2002, 18:09 bachka programkata na perl , np ;-) gotinka e.
samo imash edna zapetjka poveche na linia 12. ama me kefi perl, ama trebva mnogo da se uchi ;-) vse pak tva me ambitsira dosta |