Gå til innhold

Anbefalte innlegg

Ønsker å pipe data til et c-progam jeg driver med.

programmet leser inn data fra argumenter, men ønsker også

at det går ann å pipe til det.

Slik fungerer det nå:

./prog "noe data"

Gjør så noen beregninger med dataene, og skriver resultatene

til stdout.

Vil også at det skal kunne gjøres slik:

cat tekstfil.txt | ./prog

og resultere i det samme, Noen som har en forklaring

på hvordan dette gjøres?

Lenke til kommentar
Videoannonse
Annonse

#include <iostream>

int main(){
std::cout << "my prog" << std::endl;
char test[50];
gets(test);
std::cout << test << std::endl;
std::cout << "Done" << std::endl;
return 0;
}

 

gir følgende

 

cat fil.txt | ./test
my prog
akldf kfadj
Done

 

akldf kfadj er innholdet i fila :p

Endret av Zolo
Lenke til kommentar
...

 

Håper ikke du bruker gets til vanlig, det er å be om bufferoverflows :p

 

Mye sikrere å bruke fgets (Eller i C++, getline).

 

Takker for svar, men det var c og ikke c++ i dette tilfellet.

 

Forskjellene er egentlig trivielle men...

 

For det første kan du redirecte stdin og stdout fra kommandolinjen, men dette vet du kanskje?

 

./foo bar baz < infil > utfil

 

Kaller foos main slik: main(3, {"foo", "bar", "baz"}) (Ikke akkurat slik, men...)

Og sette stdin til foo lik infil, og stdout til foo lik utfil.

 

Når du piper til et program, så er det eneste som skjer at stdin blir redirected til stdout og motsatt på andre siden av pipen. Altså, i program1 blir stout = program2s stdin. Så du behøver ikke å gjøre noe spesielt for å la programmet ditt kunne pipes.

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...