x871kx6167ss7 Skrevet 22. mai 2008 Skrevet 22. mai 2008 Heihå. Har et lite problem med denne kodesnutten her. Ønsker å lage «pipes», sånn at jeg kan skrive «cat minFil | ./a.out». Det gjør koden under. Men dersom jeg bare skriver «./a.out» sitter den å venter på input selvfølgelig. Noen som kan fortelle meg hvordan jeg kan fikse dette. Ønsker jo at det skal være mulig å skrive «./a.out minFil», men det går jo ikke når den sitter der å venter på input som aldri kommer. #include <iostream> using namespace std; int main(int argc, char* argv[]) { char test; while (!cin.eof()) { cin >> test; cout << test; } cout << "\nEND" << endl; }
teflonpanne Skrevet 22. mai 2008 Skrevet 22. mai 2008 Du må først sjekke om du har argumenter på kommandolinja. Hvis du ikke har argumenter så gjør du den koden der, som venter på cin. Hvis du har argumenter leser du fra fil. Sjekk argc.
x871kx6167ss7 Skrevet 22. mai 2008 Forfatter Skrevet 22. mai 2008 Hmm, riktig. Men dersom man bare skriver «./a.out» vil den henge, det virker ikke akkuratt så profft. F.eks. «ls», «less» osv henger jo ikke dersom man hverken piper eller viser til filer, men gir en fin output med info.
Mr.Garibaldi Skrevet 22. mai 2008 Skrevet 22. mai 2008 Ja, men gjør du som teflonpanne sier kan du også komme med en printout av nyttig info. Sjekk om argc > 1, hvis nei -> print info, hvis ja -> kjør programmet som vanlig. (argv[0] er program pathen)
teflonpanne Skrevet 22. mai 2008 Skrevet 22. mai 2008 Det er mange programmer som henger (venter på input) helt til du trykker ^D (end of file) hvis du bare skriver ./a.out.
x871kx6167ss7 Skrevet 22. mai 2008 Forfatter Skrevet 22. mai 2008 Så det er ikke arbeide verdt å komme seg rundt det? Jaja. :< Vel, takk for svarene.
Mr.Garibaldi Skrevet 23. mai 2008 Skrevet 23. mai 2008 (endret) Tja, sjekk med argc om du skal lese fra fil, hvis ikke må du se om det ligger noe i stdin, uten å blokkere. Dette kan gjøre på forskjellige måter, noen av dem beskrives her... [EDIT] Hadde gitt deg ett bedre kode-eksempel om UiO hadde hatt fungerende gcc for tiden... Men etter "oppgraderingen" til RH, så funker nesten ingenting... [/EDIT] Endret 23. mai 2008 av Mr.Garibaldi
x871kx6167ss7 Skrevet 23. mai 2008 Forfatter Skrevet 23. mai 2008 Vel, da har jeg fått det til å funke. ;D Noen includes som jeg ikke trenger, men får sortere ut de etter hvert. #include <iostream> #include <stdio.h> #include <fstream> #include <sys/types.h> #include <sys/socket.h> #include <sys/time.h> #include <sys/select.h> using namespace std; int main(int argc, char* argv[]) { if (argc == 2) { cout << "Aapner filen " << argv[1] << endl; return 0; } timeval t_s; t_s.tv_sec = 0; t_s.tv_usec = 100; fd_set pipe; FD_ZERO(&pipe); FD_SET(0, &pipe); int answer = select( 1, &pipe, (fd_set *)NULL, (fd_set *)NULL, &t_s); if (answer == 0) { cout << "I NEED INPUT!" << endl; return 1; } else { string line; while (getline(cin, line)) cout << line << endl; } }
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å