Teste se stdin tem entrada para C ++ (windows e / ou linux)

Basicamente, quero testar se o stdin tem entrada (como se você ecoasse e o canalizasse). Encontrei soluções que funcionam, mas são feias, e gosto que minhas soluções sejam limpas.

No Linux eu uso isso:

bool StdinOpen() {
  FILE* handle = popen("test -p /dev/stdin", "r");
  return pclose(handle) == 0;
}

Sei que devo adicionar mais tratamento de erros, mas está além do pont

Nas janelas eu uso isso:

bool StdinOpen() {
  static HANDLE handle = GetStdHandle(STD_INPUT_HANDLE);
  DWORD bytes_left;
  PeekNamedPipe(handle, NULL, 0, NULL, &bytes_left, NULL);
  return bytes_left;
}

Isso é bom para o Linux, mas quero saber quais são as APIs equivalentes que posso chamar sem usar um pipe (como paratest -f $file Você fazfopen($file, "r") != NULL). Eu tenho uma idéia de que eu poderiaopen("/dev/stdin", "r") e faça a mesma coisa, mas quero saber a melhor maneira de fazê-l

Summary: Quero conhecer as APIs que eu poderia usar para substituirtest -p /dev/stdin para linux e, se você souber uma solução melhor para Window

questionAnswers(3)

yourAnswerToTheQuestion