Gå til innhold

Venter på cin som aldri kommer, noen måter å komme seg forbi?


Anbefalte innlegg

Skrevet

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;
}

Videoannonse
Annonse
Skrevet

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.

Skrevet

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.

Skrevet

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)

Skrevet (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 av Mr.Garibaldi
Skrevet

Vel, da har jeg fått det til å funke. ;D Noen includes som jeg ikke trenger, men får sortere ut de etter hvert. :p

 

#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;
}

}

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å
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...