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