Главная страница


ru.perl

 
 - RU.PERL ----------------------------------------------------------------------
 From : Valentin Nechayev                    2:5020/400     09 Jun 2004  00:18:44
 To : Denis Shaposhnikov
 Subject : Re: O_NONBLOCK STDIN
 -------------------------------------------------------------------------------- 
 
 
 >>> Denis Shaposhnikov wrote: 
 
 DS>Как можно узнать о том, что скрипту закрыли STDIN, если
 DS>  fcntl(STDIN, F_SETFL, O_NONBLOCK);
 
 Если читаешь sysread'ом - он вернёт 0 (независимо от флага неблокируемости).
 Если более высокоуровневыми средствами - eof().
 
 DS>А вообще, задача состоит в том, что бы одновременно читать из STDIN и
 DS>named pipe. Ладно, открываю оба с O_NONBLOCK и читаю в цикле. Hо
 DS>непонятно, как узнать о закрытие STDIN (что бы завершится) и как лучше
 DS>организовать сон, что бы не крутиться в холостую. Пока, ничего лучше
 DS>sleep(1) не придумал. Hо хотелось бы как-нибудь заснуть до того
 DS>момента, когда в открытых файловых хэндлах не появятся данные для
 DS>чтения.
 
 select() - в общем-то основное средство решения подобных проблем
 (при количестве хэндлов менее тысячи). Учти, что разрешение чтения означает
 только возможность чтения без блокирования, но что это будет - данные, eof
 или ошибка - не сообщается select'ом.
 -netch-
 --- ifmail v.2.15dev5.3
  * Origin: Dark side of coredump (2:5020/400)
 
 

Вернуться к списку тем, сортированных по: возрастание даты  уменьшение даты  тема  автор 

 Тема:    Автор:    Дата:  
 Re: O_NONBLOCK STDIN   Valentin Nechayev   09 Jun 2004 00:18:44 
Архивное /ru.perl/736839377fb0.html, оценка 3 из 5, голосов 10
Яндекс.Метрика
Valid HTML 4.01 Transitional