Gå til innhold

Ta i mot data (postscript) på stdin, lagre som fil


Anbefalte innlegg

Hei!

 

Jeg vil gjerne skrive et program som

 

1. tar i mot postscript-data på standard input (på samme måte som lpr)

2. lagrer dette som en temp-fil på disken

3. scp'er denne til ssh-serveren på UiO (ssh-key for å slippe passord...)

4. ssh'er inn på denne, printer fila med uio sin printkommando

5. ssh'er inn på nytt og sletter fila på hjemmeområdet mitt

 

Poenget er å lage en "erstattning" for lpr jeg kan bruke til å printe på div. uio-printere, men jeg aner ikke hvordan jeg kan ta i mot en strøm av binære data fra standard input, og så lagre dette som en fil på harddisken. Noen som har noe eksempelkode?

 

En annen ting: Hvordan kan jeg kjøre shell-kommandoer fra inne i et C++-program?

Lenke til kommentar
Videoannonse
Annonse
En annen ting: Hvordan kan jeg kjøre shell-kommandoer fra inne i et C++-program?

9633246[/snapback]

 

Klart du kan (se på, manual siden til exec eller system).

 

Et bedre spørsmål; Hvorfor vil du skrive noe slikt i C++?

Et (shell) script er mye bedre egnet, spør du meg.

Lenke til kommentar

Har laget et knippe med scripts:

 

#!/bin/sh

#BRUK: uioprint printernavn

#Configuration
TMPDIR=$HOME
TMPFILE="uioprint.ps"
LOCALTMP=$TMPDIR"/"$TMPFILE
REMOTETMP=$TMPFILE

SERVER="login.ifi.uio.no"
USER="kyrrens" #You *need* passwordless ssh!

#Not really really neccessary...
if [ ! -d $TMPDIR ]; then
   mkdir $TMPDIR
fi

#Grab data
cat /dev/stdin > $LOCALTMP

#Transfer data
scp -C $LOCALTMP $USER@$SERVER:$REMOTETMP

#Print data
ssh $USER@$SERVER ppr -P $1

#Cleanup
rm $LOCALTMP
ssh $USER@$SERVER rm $REMOTETMP

 

og

 

#!/bin/sh

#CONFIG
SERVER="login.ifi.uio.no"
USER="kyrrens" #You *need* passwordless ssh!

#BRUK: uioprintque printernavn
ssh $USER@$SERVER ppq $1

 

Uansett: De funker fint om jeg f.eks. sier

"uioprint fys2 < fil.ps"

men å printe fra f.eks. adobe funker ikke like bra (adobe henger)... Noen som har en idé om hva som er gæli?

Lenke til kommentar
Uansett: De funker fint om jeg f.eks. sier

"uioprint fys2 < fil.ps"

men å printe fra f.eks. adobe funker ikke like bra (adobe henger)... Noen som har en idé om hva som er gæli?

9641115[/snapback]

 

Fra min manualside om lpr (debian sid):

 

lpr uses a spooling daemon to print the named files when facilities become available.  If no names appear, the standard input is assumed.

 

Mulig du Adobe starter lpr med filnavn som parameter, og scriptet forsøker å lese fra stdin.

Lenke til kommentar

Forbedret versjon, fjernet en bug (hadde glemt et argument til ppr, men den tok tydeligvis fra standard in til scriptet DEN OGSÅ?!?), og la til utskrift av fil:

 

#!/bin/sh

#BRUK: uioprint printernavn [filnavn]

#Configuration
TMPDIR=$HOME
TMPFILE="uioprint.ps"
LOCALTMP=$TMPDIR"/"$TMPFILE
REMOTETMP=$TMPFILE

#LOGFILE=$TMPDIR"/uioprint.log"

SERVER="login.ifi.uio.no"
USER="kyrrens" #You *need* passwordless ssh!

#Not really really neccessary...
#if [ ! -d $TMPDIR ]; then
#    mkdir $TMPDIR
#fi

#Grab data
if [ $# -eq 0 ]; then #Spesify a printer, will you?
   echo 'You need to specify printer name!'
   exit 1
fi
if [ $# -eq 1 ]; then
   cat /dev/stdin > $LOCALTMP #Read from STDIN
   #echo "STDIN" >> $LOGFILE
fi
if [ $# -eq 2 ]; then #Print a file
   cp $2 $LOCALTMP
   #echo "FILE" >> $LOGFILE
fi

#Transfer data
scp -C $LOCALTMP $USER@$SERVER:$REMOTETMP

#Print data
ssh $USER@$SERVER ppr -P $1 $REMOTETMP

#Cleanup
rm $LOCALTMP
ssh $USER@$SERVER rm $REMOTETMP

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...