109 lines
		
	
	
		
			8.2 KiB
		
	
	
	
		
			HTML
		
	
	
	
	
	
			
		
		
	
	
			109 lines
		
	
	
		
			8.2 KiB
		
	
	
	
		
			HTML
		
	
	
	
	
	
| <!DOCTYPE HTML PUBLIC -//W3C//DTD HTML 4.01 Transitional//EN>
 | ||
| <html>
 | ||
|   <head>
 | ||
|     <title>fileevent</title>
 | ||
|   </head>
 | ||
|   <body>
 | ||
|     <h1>fileevent</h1>
 | ||
| 
 | ||
|     <p> Исполняет скрипт, когда канал открывается на чтение или
 | ||
|       запись. </p>
 | ||
|      
 | ||
|     <pre>
 | ||
|       <strong>fileevent</strong> <em>channelId</em> <strong>readable</strong> ?<em>script</em>?
 | ||
|       <strong>fileevent</strong> <em>channelId</em> <strong>writable</strong> ?<em>script</em>?
 | ||
|     </pre>
 | ||
| 
 | ||
|     <h2>ОПИСАНИЕ</h2> 
 | ||
| 
 | ||
|     <p> Эта команда используется для создания обработчиков файловых
 | ||
|       событий. Обработчик файловых событий связывает канал и скрипт
 | ||
|       таким образом, что скрипт исполняется, когда канал открывается
 | ||
|       на чтение или запись. Обработчики файловых событий используются,
 | ||
|       чтобы получение данных от другого процесса управлялось
 | ||
|       событиями. При этом получающий процесс, ожидая поступление
 | ||
|       данных, сможет продолжать взаимодействовать с
 | ||
|       пользователем. Если приложение выполняет команду <a
 | ||
|       href=gets.html>gets</a> или <a
 | ||
|       href=read.html><strong>read</strong></a> из блокирующего канала, оно
 | ||
|       не способно обслуживать другие события, поэтому оно кажется
 | ||
|       пользователю "замороженным". С использованием файловых
 | ||
|       событий процесс обратится к команде <a
 | ||
|       href=gets.htm><strong>gets</strong></a> или <a
 | ||
|       href=read.html><strong>read</strong></a> только когда информация
 | ||
|       поступит в канал.
 | ||
|     </p>
 | ||
|     
 | ||
|     <p> Аргумент <em>channelId</em> должен быть идентификатором
 | ||
|       открытого канала, который вернула предыдущая команда <a
 | ||
|       href=open.html><strong>open</strong></a> или <a href=
 | ||
|       socket.html><strong>socket</strong></a>. Если в команде присутствует
 | ||
|       аргумент <em>script</em>, команда создает новый обработчик
 | ||
|       событий: скрипт <em>script</em> будет выполнен, когда канал
 | ||
|       <em>channelId</em> откроется на чтение или запись (в зависимости
 | ||
|       от второго аргумента команды). В такой форме команда возвращает
 | ||
|       пустую строку. Обработчики для обработки открытия файла на
 | ||
|       чтение или запись соответственно независимы и могут создаваться
 | ||
|       и удаляться по одному, независимо один от другого. Однако для
 | ||
|       каждого из событий может быть только один обработчик, так что
 | ||
|       если команда <strong>fileevent</strong> выполняется, когда соответствующий
 | ||
|       обработчик (в текущем интерпретаторе) уже задан, новый скрипт
 | ||
|       заменит старый.
 | ||
|     </p>
 | ||
| 
 | ||
|     <p> Если аргумент <em>script</em> не задан, команда <strong>fileevent</strong>
 | ||
|       возвратит скрипт, заданный для данного события для канала
 | ||
|       <em>channelId</em>, или пустую строку, если скрипт не
 | ||
|       задан. Обработчик событий удаляется автоматически при закрытии
 | ||
|       канала или удалении интерпретатора.
 | ||
|     </p>
 | ||
|     <p> Канал считается открытым на чтение, если на соответствующем
 | ||
|       устройстве есть непрочитанные данные. Также канал считается
 | ||
|       открытым на чтение, если есть непрочитанные данные во входном
 | ||
|       буфере, кроме того случая, когда команда <a
 | ||
|       href=gets.htm><strong>gets</strong></a> не смогла найти в буфере
 | ||
|       законченную строку. Эта особенность позволяет читать файл
 | ||
|       построчно в неблокирующем режиме, используя обработчик
 | ||
|       событий. Канал также считается открытым на чтение, если
 | ||
|       достигнут конец соответствующего файла или на соответствующем
 | ||
|       устройстве сгенерирована ошибка. Поэтому скрипт должен уметь
 | ||
|       распознавать и корректно обрабатывать такие ситуации, чтобы не
 | ||
|       возникало зацикливаний, когда скрипт не может прочитать данные,
 | ||
|       завершается и тут же вызывается вновь.
 | ||
|     </p>
 | ||
|     <p> Канал считается открытым на запись, если по крайней мере один
 | ||
|       байт данных может быть записан в соответствующий файл или
 | ||
|       передан на соответствующее устройство, или на устройстве (в
 | ||
|       файле) сгенерирована ошибка.
 | ||
|     </p>
 | ||
|     <p> Событийно управляемый ввод - вывод лучше всего работает с
 | ||
|       каналами, переведенными в неблокирующий режим с помощью команды
 | ||
|       <a href=fconfigure.html><strong>fconfigure</strong></a>.  В
 | ||
|       блокирующем режиме команды <a
 | ||
|       href=puts.html><strong>puts</strong></a>, <a
 | ||
|       href=gets.html><strong>gets</strong></a> или <a
 | ||
|       href=read.html><strong>read</strong></a> могут заблокировать
 | ||
|       процесс, если они не могут быть выполнены сразу (например, при
 | ||
|       попытке прочитать больше данных, чем доступно в настоящий
 | ||
|       момент). При этом никакой обработки событий не происходит. В
 | ||
|       неблокирующем режиме команды <a href=
 | ||
|       puts.html><strong>puts</strong></a>, <a href=
 | ||
|       gets.html><strong>gets</strong></a> или <a
 | ||
|       href=read.html><strong>read</strong></a> никогда не блокируют
 | ||
|       процесс. Детальное описание работы команд с блокирующими и
 | ||
|       неблокирующими каналами приведено в описаниях соответствующих
 | ||
|       команд.
 | ||
|     </p>
 | ||
|     <p> Скрипт обработчика файловых событий выполняется на самом
 | ||
|       верхнем уровне вне контекста какой-либо процедуры в
 | ||
|       интерпретаторе, в котором обработчик событий был задан. Если при
 | ||
|       исполнении скрипта происходит ошибка, сообщение о ней выдается с
 | ||
|       помощью процедуры <a href=
 | ||
|       bgerror.html><strong>bgerror</strong></a>. Кроме того, при ошибке
 | ||
|       соответствующий обработчик событий удаляется. Это делается для
 | ||
|       того, чтобы избежать зацикливания из-за ошибок в обработчике.
 | ||
|     </p>
 | ||
|   </body>
 | ||
| </html>
 | ||
| 
 | 
