shakur Skrevet 26. januar 2008 Skrevet 26. januar 2008 Ø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?
Zolo Skrevet 26. januar 2008 Skrevet 26. januar 2008 (endret) #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 Endret 26. januar 2008 av Zolo
shakur Skrevet 26. januar 2008 Forfatter Skrevet 26. januar 2008 Takker for svar, men det var c og ikke c++ i dette tilfellet.
qebaba Skrevet 27. januar 2008 Skrevet 27. januar 2008 ... Håper ikke du bruker gets til vanlig, det er å be om bufferoverflows 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.
Anbefalte innlegg
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 kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå