делать то, что вам нужно?
сновном хочу проверить, есть ли ввод 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.