Проверьте, есть ли в стандартном вводе входные данные для C++ (Windows и/или Linux) ⇐ C++
-
Гость
Проверьте, есть ли в стандартном вводе входные данные для C++ (Windows и/или Linux)
По сути, я хочу проверить, есть ли входные данные со стандартного ввода (например, если вы эхо и передаете их по конвейеру). Я нашел решения, которые работают, но они уродливы, и мне нравится, чтобы мои решения были чистыми.
В Linux я использую это:
bool StdinOpen() { ФАЙЛ* handle = popen("test -p /dev/stdin", "r"); вернуть pclose(дескриптор) == 0; } Я знаю, что мне следует добавить больше обработки ошибок, но это не имеет значения.
В Windows я использую это:
bool StdinOpen() { статический дескриптор HANDLE = GetStdHandle(STD_INPUT_HANDLE); DWORD байт_слева; PeekNamedPipe(дескриптор, NULL, 0, NULL, &bytes_left, NULL); вернуть байты_слева; } Это нормально для Linux, но я хочу знать, какие эквивалентные API я могу вызвать без использования канала (например, для test -f $file вы делаете fopen($ файл, "r") != NULL). У меня есть подозрение, что я мог бы open("/dev/stdin", "r") и сделать то же самое, но я хочу знать, как лучше всего это сделать.
Резюме: Я хочу знать API, которые я мог бы использовать для замены test -p /dev/stdin для Linux, и, если вы знаете лучшее решение для окна.
По сути, я хочу проверить, есть ли входные данные со стандартного ввода (например, если вы эхо и передаете их по конвейеру). Я нашел решения, которые работают, но они уродливы, и мне нравится, чтобы мои решения были чистыми.
В Linux я использую это:
bool StdinOpen() { ФАЙЛ* handle = popen("test -p /dev/stdin", "r"); вернуть pclose(дескриптор) == 0; } Я знаю, что мне следует добавить больше обработки ошибок, но это не имеет значения.
В Windows я использую это:
bool StdinOpen() { статический дескриптор HANDLE = GetStdHandle(STD_INPUT_HANDLE); DWORD байт_слева; PeekNamedPipe(дескриптор, NULL, 0, NULL, &bytes_left, NULL); вернуть байты_слева; } Это нормально для Linux, но я хочу знать, какие эквивалентные API я могу вызвать без использования канала (например, для test -f $file вы делаете fopen($ файл, "r") != NULL). У меня есть подозрение, что я мог бы open("/dev/stdin", "r") и сделать то же самое, но я хочу знать, как лучше всего это сделать.
Резюме: Я хочу знать API, которые я мог бы использовать для замены test -p /dev/stdin для Linux, и, если вы знаете лучшее решение для окна.
Мобильная версия