делать то, что вам нужно?

сновном хочу проверить, есть ли ввод stdin (например, если вы эхо и передаете его). Я нашел решения, которые работают, но они безобразны, и мне нравятся мои решения, чтобы быть чистыми.

На Linux я использую это:

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

Я знаю, что я должен добавить больше обработки ошибок, но это не главное.

На окнах я использую это:

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

Это хорошо для Linux, но я хочу знать, каковы эквивалентные API, которые я могу вызвать без использования канала (например, дляtest -f $file вы делаетеfopen($file, "r") != NULL). У меня есть подозрение, что я могopen("/dev/stdin", "r") и делать то же самое, но я хочу знать лучший способ сделать это.

Резюме: Я хочу знать API, которые я мог бы использовать для заменыtest -p /dev/stdin для Linux, и, если вы знаете лучшее решение для Windows.

Ответы на вопрос(3)

Ваш ответ на вопрос