Я в основном хочу проверить, есть ли ввод в stdin (например, если вы выводите эхо и передаете его).Я нашел решения, которые работают, но они уродливы, и мне нравятся мои решения, чтобы быть чистыми.
В Linux я использую это:
bool StdinOpen() {
FILE* handle = popen("test -p /dev/stdin", "r");
return pclose(handle) == 0;
}
Я знаю, что я должен добавить больше ошибокобработки, но это не имеет значения.
В Windows я использую это:
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.