Как определить, пуст ли STDIN?

Я пишу эмулятор для своего курса операционных систем. У меня проблема в том, что нам нужно получить все наши файлы .job (они похожи на прикладные программы, загружаемые в эмулятор) из STDIN и прочитать их.

Позвоните:

./RMMIX < aJob.job

Я просто пропустил его с помощью

while(getline(std::cin, line)) 

построчно. Проблема в том, что если я ничего не помещаю в STDIN, то cin будет ждать ввода пользователя, а НЕ того, что я хочу. Мне нужна программа, чтобы распознавать отсутствие текста в STDIN и завершать работу, а не ждать вместо этого ввода пользователя.

Я определил, что могу запрашивать длину следующим образом:

size_t beg = std::cin.tellg();
std::cin.seekg(0, std::ios_base::end);
size_t end = std::cin.tellg();
std::cin.seekg(0, std::ios_base::beg);

и завершать работу, если std :: cin имеет длину из 0.

Есть ли другие решения этой проблемы? Это портативное решение?

7
задан razlebe 4 May 2011 в 09:49
поделиться