LINUX.ORG.RU

fcntl perl


0

0

хотел создать не блокирующий хендлер fcntl( HENDLER, F_SETFL, O_NONBLOCK);

выдаёт ошибку your vendor has not defined Fcntl macro F_SETFL

ошибка явно не синтаксиса а или из за ОС или из за интерпретатора использую winXP и ActivePerl-5.10.0.1005 понимаю что форум по linux но может кто сталкивался помогите разобраться.

★★★★★

Это ж винда и делать там надо по-виндовому.

const86 ★★★★★
()
Ответ на: комментарий от TDrive

> а как по виндовому? в какую сторону копати хотябы?

Вообще в 'perldoc perlport' ясно указано -

fcntl Not implemented. (Win32) Some functions available based on the
version of VMS. (VMS)

Копать следует в сторону модуля Win32API::File и функций GetOsFHandle и SetHandleInformation.

d_a ★★★★★
()
Ответ на: комментарий от d_a

о большое спасибо пойду копать (на 6 форумах спросил вы единственные кто смог ответить)

TDrive ★★★★★
() автор топика
Ответ на: комментарий от d_a

чё то я запутался

GetOsFHandle из хендлера перла делает хендлер win32(перевёл с AxctiveState)

SetHandleInformation всего 2 флага HANDLE_FLAG_INHERIT , HANDLE_FLAG_PROTECT_FROM_CLOSE

1 чтоб хендел переносился в дочерний процесс 2 чтоб нельзя было закрыть вызвав CloseHandle

расскажите поподробнее как неблокирующий ввод\вывод сделать?

TDrive ★★★★★
() автор топика
Ответ на: комментарий от Hjorn

нашел по ссылке такой коммент: On Windows, you can use this ioctl call to make the socket non blocking:

ioctl($socket, 0x8004667e, $nonblocking);

update: $nonblocking = 1 => makes the socket non blocking, $nonblocking = 0 => makes the socket blocking.

в описание написано что ioctl() определяет сколько байт доступно в сокете

а тут она устанавливает флаги для хендлера и откуда взяли 0x8004667e?

можете что нибудь сказать?

TDrive ★★★★★
() автор топика
Ответ на: комментарий от TDrive

> ioctl($socket, 0x8004667e, $nonblocking);

Шаманство... Похоже те кто это применяют, сами не знают что делают. Захардкодили некую константу таким образом видимо.

Но вот кажется нарыл объяснение: http://www.perlmonks.org/?node_id=780083

Hjorn
()
Ответ на: комментарий от TDrive

Кстати, может подумаете о другом инструменте? ;) В Tcl non-blocking IO из коробки и соответственно в тыщу раз проще всё делается.

Hjorn
()
Ответ на: комментарий от Hjorn

да дело не в инструменте просто хотелось разобраться во всём.

мне всё больше кажется что программировать на perl в win сплошной геморрой.

скажите плиз это действительно так или просто у меня руки кривые?

TDrive ★★★★★
() автор топика
Ответ на: комментарий от TDrive

> мне всё больше кажется что программировать на perl в win сплошной геморрой.

Да, пожалуй. Perl сильно заточен под юникс и сам по себе слишком сложен. Поэтому его непросто портировать.

Касательно асинхронной обработки посмотрите ещё POE. Хороший event-driven фреймворк, хоть и несколько тяжеловесный. Его автор сам занимался портированием на windows, так что вероятно многие проблемы там уже решены.

Hjorn
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.