|
ru.perl- RU.PERL ---------------------------------------------------------------------- From : Dmitry Ponomaryov 2:5020/968.28 09 Aug 2001 20:49:54 To : All Subject : ioctl - грабли :-| -------------------------------------------------------------------------------- Столкнулся с проблемой - >Perl неверно раскрывает определения команд для ioctl :-( [пробовал на нескольких командах] в результате ioctl абсолютно неприменим из Perl :-(. >Похоже что грабли в вычислении размера аргумента - см. ниже. Hа пример: _IOW(0xBA, 1, int) >===== printf( "%u", _IOW(0xBA, 1, int) ); /* C */ >===== print _IOW(0xBA, 1, int), "\n"; # Perl >===== Если раскрывать в C, то _IOW(0xBA, 1, int) дает "1074051585". Из Perl'а (после перевода сишного .h в .ph) получаем "1073789441". Стал копать и вот что нашел: _IOC_DIR, _IOC_TYPE, _IOC_NR у обоих чисел одинаковые, а вот _IOC_SIZE - разный! Т.е. C верное переделывает "int" в 4=size_of(int), а Perl делает из int строку \'int\' и берет как размер 0. В результате ioctl не находит команды и вываливается с ошибкой. >Как быть и что делать? Dmitry Ponomaryov [ Honorary member of F.M.Dostoevsky Club ] --- tin/pre-1.4-19990624 ("Dawnrazor") (UNIX) (Linux/2.2.12-20 (i686)) * Origin: Feel the power of Linux (2:5020/968.28@fidonet) Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.perl/17588ea7fbb74.html, оценка из 5, голосов 10
|