Автор Тема: pechatane ot telnet ili ssh  (Прочетена 4505 пъти)

mil_dim

  • Напреднали
  • *****
  • Публикации: 43
    • Профил
pechatane ot telnet ili ssh
« -: 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
Активен

mil_dim

  • Напреднали
  • *****
  • Публикации: 43
    • Профил
pechatane ot telnet ili ssh
« Отговор #1 -: 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]=='@''<img'> && ( a[1]=='@''<img'> && (a[2]=='@' ))
{
f=fopen("/dev/lp0","rw+");

for (k=3 ;k<i;k++ ) fprintf(f,"%c",a[k]);
fprintf(f,"\n");
fclose(f); }
}

}
Активен

dam

  • Напреднали
  • *****
  • Публикации: 37
    • Профил
pechatane ot telnet ili ssh
« Отговор #2 -: Apr 15, 2002, 09:47 »
Може би проблемът е, че изходящият файл има буфер и го изпраща едва, когато го затвориш. Ако не е това проблема (долният код се държи по същия начин - печета чак накрая), сложи open и close в цикъла.

Ето ти парче на Perl:
Примерен код

#!/usr/bin/perl -w
use strict;
use FileHandle;

my $print_dev = '/dev/lp0';
open PRN, ">>$print_dev" or die "Unable to open '$print_dev' for writing: $!";
PRN->autoflush(1);

while (<>)
{
  next unless s/^@@@//;
  print PRN, $_;
}
close PRN or die "$print_dev did not close ok: $@";



Не съм пробвал кода, но трябва да свърши работа.

Успех!
Активен

hint

  • Напреднали
  • *****
  • Публикации: 39
    • Профил
pechatane ot telnet ili ssh
« Отговор #3 -: 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 '<img'>
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.
Активен

dam

  • Напреднали
  • *****
  • Публикации: 37
    • Профил
pechatane ot telnet ili ssh
« Отговор #4 -: Apr 15, 2002, 10:42 »
Всъщност, проблемът на C-програмата е, че не усеща кога е дошъл края на файла. Така като я гледам в нея име една много често срещана грешка, която се допуска когато не знаеш точно какво става :-)

getchar връща резултат от тип int, а не char.

Така че ще трябва да се проверява резултатът от getchar дали пък не е отрицателен, което е индикатора за край на файл.

Не виждам нищо неясно в Perl-примера. Ако мога да разясня нещо - ще го направя.
Активен

mil_dim

  • Напреднали
  • *****
  • Публикации: 43
    • Профил
pechatane ot telnet ili ssh
« Отговор #5 -: 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
Активен

mil_dim

  • Напреднали
  • *****
  • Публикации: 43
    • Профил
pechatane ot telnet ili ssh
« Отговор #6 -: 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]=='@''<img'> && ( a[1]=='@''<img'> && (a[2]=='@' ))
  {

  f=fopen("/dev/tty12","rw+");
  
  for (k=3 ;k<i;k++ ) fprintf(f,"%c",a[k]);
  fprintf(f,"\n");
  fclose(f); }
  }
  
  }
Активен

dam

  • Напреднали
  • *****
  • Публикации: 37
    • Профил
pechatane ot telnet ili ssh
« Отговор #7 -: Apr 15, 2002, 17:49 »
Така като го гледам ще работи ако char ти е signed тип. Ако не е - загиваш.
Сега нямам време, но утре ще ти пратя и коментирана версия на варианта на Perl.
Активен

hint

  • Напреднали
  • *****
  • Публикации: 39
    • Профил
pechatane ot telnet ili ssh
« Отговор #8 -: 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;
Активен

dam

  • Напреднали
  • *****
  • Публикации: 37
    • Профил
pechatane ot telnet ili ssh
« Отговор #9 -: Apr 15, 2002, 18:00 »
Все пак се оказа, че имам време:
Примерен код

#!/usr/bin/perl -w
use strict; # make perl complain about ambiguous constructs
use FileHandle;

my $print_dev = '/dev/lp0';

# open output file for appending, do not truncate
# PRN is the file handle
open PRN, ">>$print_dev" or die "Unable to open '$print_dev' for writing: $!";

# make PRN flush after each print
PRN->autoflush(1);

# <> is true while there is something on STDIN
# false on EOF
while (<>)
{
 # $_ is current line from STDIN
 # next cycle unless line has three @s in the beginning
 # remove the three @s from the beginning
 # s/// returns true if there were a match
 next unless s/^@@@//;

 # print it on PRN
 print PRN, $_;
}

# close output file
close PRN or die "$print_dev did not close ok: $@";

За повече подробности `perldoc perlre', `perldoc perlop', `perldoc perlvar'
Активен

mil_dim

  • Напреднали
  • *****
  • Публикации: 43
    • Профил
pechatane ot telnet ili ssh
« Отговор #10 -: 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
Активен

Подобни теми
Заглавие Започната от Отговора Прегледи Последна публикация
telnet
Настройка на програми
ivanatora 4 2018 Последна публикация Jun 09, 2004, 14:33
от ivanatora
достъп с telnet
Настройка на програми
vic_semionov 5 2474 Последна публикация Jul 24, 2004, 16:20
от JOKe
Въпрос за telnet
Настройка на програми
vic_semionov 10 3053 Последна публикация Aug 14, 2004, 17:49
от vic_semionov
как да сменя порта на telnet сървъра
Настройка на програми
kdobrev 8 2973 Последна публикация Nov 15, 2004, 10:28
от kdobrev
Проблем с telnet
Настройка на програми
Apache 12 3645 Последна публикация Jul 11, 2005, 13:01
от Italianeca