2014-02-04 2 views
0

В another question I asked Я понял, что хочу перенаправить stdin, но у него нет абсолютно никаких входных данных. Например, я хочу позвонить getchar(), чтобы повесить его навсегда. Затем я хотел бы закончить приложение, отправив сигнал об ошибке.Перенаправить stdin, чтобы не вводить никаких входных данных?

Я попытался freopen("/dev/null", "r", stdin);, но это не работает, потому что /dev/null когда чтение возвращает EOF, который, кажется, инициирует getchar() должна быть выполнена, и моя программа завершается.

Как я могу перенаправить stdin, чтобы ничего не читать?

+0

Конец файла является псевдонимом в мире Linux/C, как правило, со значением -1. Если вы хотите подождать до тех пор, пока не будете убиты, чтение из stdin - это не способ сделать это. Измените свой вопрос или отправьте другое. – keshlam

ответ

1

На linux вы можете попытаться создать именованный канал: http://linux.die.net/man/3/mkfifo и просто прочитать его.

Но что вы пытаетесь достичь в конечном итоге? Кажется, должен быть лучший способ.

+0

Мне нравится этот подход. Я попробовал 'mkfifo (" empty_input ", S_IRUSR | S_IWUSR);' и затем 'freopen (" ./ empty_input "," w ", stdin);'. Я предполагаю, что это сработает, но мой вызов 'mkfifo' возвращает' -1' и устанавливает 'errono' в' EACCES', который является «разрешенным разрешением» –

+0

Я попробовал это, и для меня он выполняется без ошибок, и он просто зависает на ' open ("./ empty_input", O_WRONLY | O_CREAT | O_TRUNC, 0666' (вывод strace). –

+0

Я попытался запустить 'mkfifo empty_input' из командной строки и кажется, что эта команда не найдена в моей ОС. Ядро Linux –