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


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)
 
 

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

 Тема:    Автор:    Дата:  
 ioctl - грабли :-|   Dmitry Ponomaryov   09 Aug 2001 20:49:54 
Архивное /ru.perl/17588ea7fbb74.html, оценка 2 из 5, голосов 10
Яндекс.Метрика
Valid HTML 4.01 Transitional