Gå til innhold

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


Anbefalte innlegg

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

Lenke til kommentar
Videoannonse
Annonse

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
Lenke til kommentar

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

}

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