Проверьте, есть ли в стандартном вводе входные данные для C++ (Windows и/или Linux)C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Проверьте, есть ли в стандартном вводе входные данные для C++ (Windows и/или Linux)

Сообщение Anonymous »

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

В 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). У меня есть подозрение, что я мог бы открыть("/dev/stdin", "r") и сделать то же самое, но я хочу знать, как лучше всего это сделать.

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

Подробнее здесь: https://stackoverflow.com/questions/683 ... d-or-linux
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»