остановите канал () открывающийся stdin

Как дополнение к ответу Gilles, кто предлагает перекомпилировать полный пакет PHP, можно также ожидать PHP 5.4. В 5,4 я реструктурировал readline функциональность, что все необходимые части находятся в readline модуле, таким образом, можно создать это одинокое.

$ wget ...php-5.4.0.tar.bz2
$ tar xjf php-5.4.0.tar.bz2
$ cd php-5.4.0/ext/readline
$ phpize && ./configure && make

Затем Вы закончите с a modules/readline.so который может быть загружен из php.ini (make install переместит его в extension_dir)

Кроме того, дистрибьютор может поставить readline модуль (возможно, связанный против libedit, не readline), и интерактивный режим будет доступен.

Это все не поможет Вам теперь (как PHP 5.4. не отсутствует, еще), но мог бы помочь другим, находящим этот вопрос позже.

Еще некоторые детали о моем блоге: http://schlueters.de/blog/archives/133-Now-in-trunk-Improved-interactive-shell.html

Править: На самом деле сообщение в блоге является более старым, чем это изменение, но могло бы все еще быть интересным. Немного информации находится в отчете об ошибках № 53878, но не очень любой... после выпуска, http://php.net/commandline.interactive должен иметь больше.

2
16.09.2016, 02:38
2 ответа

Новый дескриптор файла всегда уже занимает самое низкое целое число, не используемое.

$ cat >test.c
main(){exit(open("/dev/null",0));}
^D
$ cc test.c
$ ./a.out; echo $?
3
$ ./a.out <&-; echo $?
0
$ ./a.out >&-; echo $?
1

Система не заботится о "стандартных дескрипторах файлов" или чем-либо как этот. Если дескриптор файла 0 будет закрыт, то новый дескриптор файла будет присвоен в 0.

Есть ли любое место в Вашей программе или в том, как Вы запускаете его, который может вызывать close(0)?

5
27.01.2020, 21:53

strace может дать Вам изображение того, что Ваш исполняемый файл делает с дескрипторами файлов:

strace -f -e trace=file,desc,ipc -o /tmp/strace.txt /path/to/exe arg1 arg2...
2
27.01.2020, 21:53
  • 1
    +1, хотя это не отвечало на мои вопросы, это вошло очень удобное! –  Mark Underwood 18.01.2011, 09:42

Теги

Похожие вопросы