È»¶ø£¬ÕýÈçÈκθ´ÔÓµÄϵͳµ÷ÓÃÒ»Ñù£¬`ioctl`ÔÚʹÓùý³ÌÖÐÒ²²¢·Ç×ÜÊÇ˳·ç˳ˮ
µ±`ioctl`µ÷ÓÃʧ°Üʱ£¬Ëü²»½ö»á×è°³ÌÐòµÄÕý³£ÔËÐУ¬»¹¿ÉÄÜÒý·¢Ò»ÏµÁÐÄÑÒÔ×·×ٵĴíÎó
±¾ÎÄÖ¼ÔÚÉîÈëÆÊÎö`ioctl`µ÷ÓÃʧ°ÜµÄÔÒò£¬²¢ÌṩһϵÁÐÓÐЧµÄ½â¾ö·½°¸£¬°ïÖú¿ª·¢ÕßÃÇѸËÙ¶¨Î»ÎÊÌâ¡¢»Ö¸´ÏµÍ³Îȶ¨
Ò»¡¢`ioctl`ϵͳµ÷ÓõĻù´¡ÈÏÖª `ioctl`ÊÇÒ»¸ö¹¦ÄÜÇ¿´óµÄϵͳµ÷Óã¬ËüÔÊÐíÓû§¿Õ¼ä³ÌÐòÏòÄں˷¢ËÍ¿ØÖÆÃüÁÒÔʵÏÖ¶ÔÉ豸Çý¶¯³ÌÐòµÄ¾«È·¿ØÖÆ
ÕâЩÃüÁî¿ÉÒÔÊǶÁÈ¡É豸״̬¡¢ÉèÖÃÉ豸²ÎÊý¡¢Ö´ÐÐÌØ¶¨Ó²¼þ²Ù×÷µÈ
`ioctl`µÄÔÐÍͨ³£¶¨ÒåΪ£º int ioctl(int fd, unsigned long request,...); - `fd`£ºÖ¸ÏòÄ¿±êÉ豸µÄÎļþÃèÊö·û
- `request`£ºÉè±¸ÌØ¶¨µÄ¿ØÖÆÃüÁͨ³£ÊÇÒ»¸öÕûÊý»òºê¶¨Òå
- `...`£º¿ÉÑ¡²ÎÊý£¬¸ù¾Ý¾ßÌåÃüÁîµÄ²»Í¬£¬¿ÉÄÜÐèÒª´«µÝÒ»¸öÖ¸ÏòÊý¾ÝµÄÖ¸Õë
`ioctl`µÄÁé»îÐÔÊÇÆäÓÅÊÆËùÔÚ£¬µ«Í¬Ê±Ò²´øÀ´Á˸´ÔÓÐÔ
²»Í¬µÄÉ豸¡¢²»Í¬µÄÇý¶¯¿ÉÄÜÖ§³ÖÍêÈ«²»Í¬µÄÃüÁ£¬ÕâÒªÇ󿪷¢ÕßÔÚ±àд´úÂëʱ±ØÐë·Ç³£½÷É÷£¬È·±£ÃüÁîÓëÉ豸¡¢Çý¶¯Ö®¼äµÄ¼æÈÝÐÔ
¶þ¡¢`ioctl`µ÷ÓÃʧ°ÜµÄ³£¼ûÔÒò `ioctl`µ÷ÓÃʧ°Üʱ£¬Í¨³£»á·µ»ØÒ»¸ö¸ºÖµ£¬²¢ÇÒ`errno`»á±»ÉèÖÃΪÏàÓ¦µÄ´íÎóÂë
Àí½âÕâЩ´íÎóÂëÊǶ¨Î»ÎÊÌâµÄ¹Ø¼ü
ÒÔÏÂÊÇһЩµ¼ÖÂ`ioctl`µ÷ÓÃʧ°ÜµÄ³£¼ûÔÒò£º 1.ÎÞЧµÄÎļþÃèÊö·û£ºÈç¹û´«µÝ¸øioctlµÄÎļþÃèÊö·ûÎÞЧ£¨Èçδ´ò¿ª»òÒѹرգ©£¬Ôòµ÷Óý«Ê§°Ü£¬`errno`¿ÉÄܱ»ÉèÖÃΪ`EBADF`
2.²»Ö§³ÖµÄÃüÁÈç¹ûÇëÇóµÄrequestÃüÁîÔÚµ±Ç°É豸Éϲ»ÊÜÖ§³Ö£¬`ioctl`½«·µ»Ø´íÎó£¬`errno`¿ÉÄÜÉèÖÃΪ`EINVAL`»ò`ENOTTY`£¨±íʾÉ豸²»Ö§³Ö¸Ã²Ù×÷£©
3.²ÎÊý´íÎ󣺴«µÝ¸øioctlµÄ²ÎÊý¸ñʽ²»ÕýÈ·»ò³¬³öÁËÉ豸ÔÊÐíµÄ·¶Î§£¬Ò²»áµ¼Öµ÷ÓÃʧ°Ü£¬³£¼ûµÄ´íÎóÂë°üÀ¨`EINVAL`
4.ȨÏÞ²»×㣺ִÐÐijЩioctlÃüÁîÐèÒªÌØ¶¨µÄȨÏÞ£¨È糬¼¶Óû§È¨ÏÞ£©£¬Èç¹ûµ±Ç°½ø³ÌȨÏÞ²»×㣬µ÷Óý«Ê§°Ü£¬`errno`¿ÉÄܱ»ÉèÖÃΪ`EACCES`»ò`EPERM`
5.É豸״̬ÎÊÌ⣺É豸´¦ÓÚ²»¿ÉÓÃ״̬£¨ÈçÒÑÒÆ³ý¡¢ÕýÔÚÖØÖõȣ©£¬Ò²»áµ¼ÖÂ`ioctl`µ÷ÓÃʧ°Ü£¬´íÎóÂë¿ÉÄÜÒòÉ豸¶øÒì
6.Äں˴íÎó£ºÄÚºËÔÚ´¦ÀíioctlÇëÇóʱÓöµ½ÄÚ²¿´íÎó£¬ÈçÄÚ´æ·ÖÅäʧ°Ü¡¢×ÊÔ´ºÄ¾¡µÈ£¬Ò²¿ÉÄܵ¼Öµ÷ÓÃʧ°Ü£¬´Ëʱ´íÎóÂë¿ÉÄܽÏΪ¶àÑù
Èý¡¢ÉîÈëÆÊÎö£º´Ó´íÎóÂëµ½ÎÊÌâ¸ùÔ´ Ãæ¶Ô`ioctl`µ÷ÓÃʧ°Ü£¬¿ª·¢ÕßÊ×ÏÈÐèÒª¼ì²é`errno`µÄÖµ£¬¸ù¾Ý´íÎóÂë³õ²½ÅжϿÉÄܵÄÎÊÌâËùÔÚ
µ«½ö½öÖªµÀ´íÎóÂëÊDz»¹»µÄ£¬»¹ÐèÒª½áºÏ¾ßÌåµÄÓ¦Óó¡¾°¡¢Éè±¸ÌØÐÔÒÔ¼°Çý¶¯ÊµÏÖ½øÐÐÉîÈë·ÖÎö
- ¼ì²éÎļþÃèÊö·û£ºÈ·±£ÎļþÃèÊö·ûÓÐЧÇÒÖ¸ÏòÕýÈ·µÄÉ豸
¿ÉÒÔͨ¹ý`fcntl(fd,F_GETFD)`µÈµ÷ÓÃÑéÖ¤ÎļþÃèÊö·ûµÄ״̬
- ÑéÖ¤ÃüÁîÓë²ÎÊý£º²éÔÄÉ豸Îĵµ»òÇý¶¯´úÂ룬ȷÈÏËùʹÓõÄ`request`ÃüÁî¼°²ÎÊýÊÇ·ñºÏ·¨¡¢ÊÇ·ñÖ§³Ö
¶ÔÓÚ×Ô¶¨ÒåÉ豸£¬¿ÉÄÜÐèÒªÓëÓ²¼þ¹©Ó¦ÉÌ»òÇý¶¯¿ª·¢ÕßÈ·ÈÏ
- ¼ì²éȨÏÞ£ºÈ·±£µ±Ç°½ø³ÌÓµÓÐÖ´ÐиÃioctlÃüÁîËùÐèµÄȨÏÞ
¿ÉÒÔͨ¹ý`strace`µÈ¹¤¾ß¸ú×Ùϵͳµ÷Ó㬲鿴ȨÏÞ¼ì²éµã
- É豸״̬¼à¿Ø£ºÊ¹ÓÃdmesg¡¢lsblk¡¢`fdisk`µÈ¹¤¾ß¼ì²éÉ豸״̬£¬È·ÈÏÉ豸ÊÇ·ñÔÚÏß¡¢ÊÇ·ñÒÑÕýÈ·¹ÒÔØ»ò³õʼ»¯
- ÄÚºËÈÕÖ¾·ÖÎö£º²é¿´`/var/log/syslog`¡¢`/var/log/messages`»òÄں˻·»º³åÇø£¨Í¨¹ý`dmesg`£©ÖеÄÈÕÖ¾ÐÅÏ¢£¬Ñ°ÕÒ¿ÉÄܵÄÄں˴íÎó»ò¾¯¸æ
ËÄ¡¢½â¾ö·½°¸Óë×î¼Ñʵ¼ù Õë¶Ô`ioctl`µ÷ÓÃʧ°Ü£¬ÒÔÏÂÊÇһЩʵÓõĽâ¾ö·½°¸ºÍ×î¼Ñʵ¼ù£º 1.ÔöÇ¿´íÎó´¦Àí£ºÔÚ´úÂëÖÐÌí¼ÓÏêϸµÄ´íÎó´¦ÀíÂß¼£¬¸ù¾Ý`errno`µÄÖµÊä³öÓÐÒâÒåµÄ´íÎóÐÅÏ¢£¬°ïÖú¿ìËÙ¶¨Î»ÎÊÌâ
2.ʹÓøü°²È«µÄ½Ó¿Ú£ºÈç¹û¿ÉÄÜ£¬¾¡Á¿Ê¹Óøü¸ß²ã´ÎµÄ¡¢¸ü°²È«µÄ½Ó¿ÚÌæ´úÖ±½ÓʹÓÃ`ioctl`£¬±ÈÈçͨ¹ýÉè±¸ÌØ¶¨µÄ¿âº¯Êý½øÐвÙ×÷
3.ȨÏÞ¹ÜÀí£ºÈ·±£Ó¦ÓóÌÐòÒÔÊʵ±µÄȨ