LinuxÇý¶¯Ö®ioctl
ÔÚÓû§¿Õ¼ä£¬Ê¹ÓÃioctlϵͳµ÷ÓÃÀ´¿ØÖÆÉ豸£¬ÔÐÍÈçÏ£º
int ioctl(int fd, unsigned long cmd, ...);
µÚÈý¸ö²ÎÊý²»±íʾһ¸ö±äÊýÄ¿µÄ²ÎÊý£¬¶øÊÇÒ»¸öÀàÐÍ¿ÉÑ¡µÄ²ÎÊý¡£µÚÈý¸ö²ÎÊýÒÀÀµÓÚ¿ØÖÆÃüÁһЩÃüÁî²»ÓòÎÊý£¬Ò»Ð©ÓÃÒ»¸öÕûÊýÖµ£¬Ò»Ð©Ê¹ÓÃÖ¸Õë
1¡¢ioctlº¯Êý¶¨ÒåÃüÁî
ÔÚ±àдioctl´úÂë֮ǰ£¬Ê×ÏÈÐèÒª¶¨ÒåÃüÁΪÁË·ÀÖ¹¶Ô´íÎóµÄÉ豸ʹÓÃÕýÈ·µÄÃüÁÃüÁîºÅÓ¦¸ÃÔÚϵͳ·¶Î§ÄÚÊÂΨһµÄ
ioctlÃüÁî±àÂë±»»®·ÖΪ¼¸¸ö¶Î£¬include/asm/ioctl.hÖж¨ÒåÁËÕâЩ×ֶΣºÀàÐÍ£¨»ÃÊý£©£¬»ùÊý£¬´«ËÍ·½Ïò£¬²ÎÊý´óСµÈ¡£Documentation/ioctl-number.txtÎļþÖÐÂÞÁÐÁËÔÙÄÚºËÖÐÒѾʹÓÃÁ˵ĻÃÊý¡£
¶¨ÒåioctlÃüÁîµÄÕýÈ··½·¨ÊÇʹÓÃ4¸öλ¶Î£¬Õâ¸öÁбíÖнéÉܵķûºÅ¶¨ÒåÔÚ<linux/ioctl.h>ÖУº
Type£º
»ÃÊý£¨ÀàÐÍ£©£º±íÃ÷ÄĸöÉ豸µÄÃüÁÔڲο¼ÁËioctl-number.txtÖ®ºóÑ¡³ö£¬8λ¿í¡£
Number£º
ÐòºÅ£¬±íÃ÷É豸ÃüÁîÖеĵڼ¸¸ö£¬8λ¿í
ÄÚºËÌṩÁËÏÂÁкêÀ´°ïÖú¶¨ÒåÃüÁîºÅ£¬ÈçÏÂ
_IO(type, nr)£ºÃ»ÓвÎÊýµÄÃüÁî
_IOR(type, nr, datatype)£º´ÓÇý¶¯ÖжÁÊý¾Ý
_IOW(type, nr, datatype)£ºÐ´Êý¾Ýµ½Çý¶¯
_IOWR(type, nr, datatype)£ºË«Ïò´«ËÍ£¬typeºÍnumber×÷Ϊ²ÎÊý±»´«µÝ
2¡¢ioctlº¯ÊýµÄʵÏÖ
·ÖÈý¸ö¼¼Êõ»·½Ú£º
1¡¢·µ»ØÖµ
ioctlº¯ÊýµÄʵÏÖͨ³£ÊǸù¾ÝÃüÁîÖ´ÐеÄÒ»¸öswitchÓï¾ä¡£µ«Êǵ±ÃüÁî²»ÄÜÆ¥ÅäÈκÎÒ»¸öÉ豸ËùÖ§³ÖµÄÃüÁîʱ£¬Í¨³£·µ»Ø-EINVAL£¨“·Ç·¨²ÎÊý”£©
2¡¢²ÎÊýʹÓÃ
Èç¹ûÊÇÒ»¸öÕûÊý£¬¿ÉÒÔÖ±½ÓʹÓá£Èç¹ûÊÇÖ¸Õ룬ÎÒÃDZØÐëÈ·±£Õâ¸öÓû§µØÖ·ÊÇÓÐЧµÄ£¬Òò´ËʹÓÃǰÐè½øÐÐÕýÈ·µÄ¼ì²é
ʹÓÃint access_ok(int type, const void *addr, unsigned long size)À´¼ì²éÒ»¸öÖ¸ÕëµØÖ·ÊÇ·ñ¿ÉÒÔ·ÃÎÊ
µÚÒ»¸ö²ÎÊýÊÇVERIFY_READ»òÕßÊÇVERIFY_WRITE£¬ÓÃÀ´±íÃ÷¶ÁÓû§Äڴ滹ÊÇдÓû§ÄÚ´æ¡£addr²ÎÊýʱҪ²Ù×÷µÄÓû§ÄÚ´æµØÖ·£¬sizeÊDzÙ×÷µÄ³¤¶È¡£Èç¹ûioctlÐèÒª´ÓÓû§¿Õ¼ä¶ÁÒ»¸öÕûÊý£¬ÄÇôsize = sizeof(int)¡£Èç¹ûÐèҪͬʱ¶ÁºÍд£¬ÔòʹÓÃVERIFY_WRITE¡£
access_ok·µ»ØÒ»¸ö²¼¶ûÖµ£º1Êdzɹ¦£¨´æÈ¡Ã»ÎÊÌ⣩ºÍ0ÊÇʧ°Ü£¨´æÈ¡ÓÐÎÊÌ⣩£¬Èç¹û¸Ãº¯Êý·µ»ØÊ§°Ü£¬ÔòioctlÓ¦µ±·µ»Ø-EFAULT£¬È磺
if(_IOC_DIR(cmd) & _IOC_READ)// Ϊʲô_IOC_READ¶ÔÓ¦VERIFY_WRITE£¿£¿£¿
err = !access_ok(VERIFY_WRITE, (void __user *)arg, _IOC_SIZE(cmd));
else if(_IOC_DIR(cmd) & _IOC_WRITE)
err = ! access_ok(VERI
Ïà¹ØÎĵµ£º
ÐéÄâ»úlinuxÉÏÍøÅäÖà ͼ½â½Ì³Ì
ÐéÄâ»úlinuxÏÂNATÉÏÍø·½Ê½¸úwindowsÏÂÊDz»Ò»ÑùµÄ£¬windowsϵͳֻҪֱ½ÓÑ¡ÔñNATÉÏÍø·½Ê½¼´¿É£¬²»ÐèÒªÆäËüÅäÖ㬶ølinuxÒªÏë ÓÃNAT·½Ê½ÉÏÍøÐè½øÐÐÁíÍâµÄÉèÖá£ÏÂÃæµÄͼÎĽ̳Ì,ÎÒ¾õµÃ»¹ÊDZȽϾ«µäµÄ£¬Ë¼Â··Ç³£ÇåÎú£¬Ï£Íû¶Ô¸Õ½Ó´¥ linuxµÄÅóÓÑÓÐËù°ïÖú¡£
µãÐéÄâ»ú²Ëµ¥: ±à¼---±à¼ ......
LinuxС¼¼ÇÉÊÕ¼¯
ǰÑÔ£ºÒòΪÓÃLinuxµÄʱ¼äÔ½À´Ô½³¤£¬ËùÐèÒª×öµÄÊÂÒ²Ô½À´Ô½¶à£¬Ð§ÂʳÉÁËÎÒ±ØÐèÍ»ÆÆµÄÆ¿¾±¡£ÔÚ´Ë×ܽáÒ»ÏÂÕâ¶Îʱ¼äÓùýµÄһЩºÃµÄLinux¼¼ÇÉ¡£ÒÔºóʱ³£²¹³äÕâÑù×Ô¼ºÒªÓõÄʱºò¾ÍºÜ·½±ãÁË¡£
Author:Ajian
[Îı¾´¦Àí]
1¡¢²é¿´Ä³ÎļþµÄÒ»²¿·Ö
Èç¹ûÄãÖ»Ïë¿´ÎļþµÄǰ 5 ÐУ¬¿ÉÒÔʹÓà head ÃüÁ
È磺head -5 ......
1¡¢Èí¼þ°²×°
Ð¶ÔØ£¬·Ö¼¸ÖÖÇé¿ö£º
A£º
RPM°ü£¬ÕâÖÖÈí¼þ°ü¾ÍÏñwindowsµÄEXE°²×°
ÎļþÒ»Ñù£¬¸÷ÖÖÎļþÒѾ±àÒëºÃ£¬²¢´òÁ˰ü£¬ÄĸöÎļþ¸Ã·Åµ½ÄĸöÎļþ¼Ð£¬¶¼Ö¸¶¨ºÃÁË£¬°²×°
·Ç³£·½±ã£¬ÔÚͼÐνçÃæÀïÄãÖ»ÐèҪ˫»÷¾ÍÄÜ×Ô¶¯°²×°
¡£
==ÈçºÎÐ¶ÔØ:
1¡¢´ò¿ªÒ»¸öSHELLÖÕ¶Ë
2¡¢ÒòΪLinux
ϵÄÈí¼þÃû¶¼°üÀ¨°æ±¾ºÅ£¬ËùÒÔÐ¶ÔØÇ°×îºÃ ......
´Ówrite()µ÷Ó÷µ»ØÊ±£¬ÄÚºËÒѾ½«»º³åÇøËùÌṩµÄÊý¾Ýµ½Äں˵Ļº³åÇø£¬µ«ÊÇÎÞ·¨±£Ö¤Êý¾ÝÒѾд³öµ½ÆäÔ¤¶¨µÄÄ¿µÄµØ¡£µÄÈ·£¬Ð´Èëµ÷Ó÷µ»ØµÄËÙ¶ÈʵÔÚÌ«¿ìÁË£¬¿ÉÄÜûÓÐʱ¼äÍê³É¸ÃÏîÄ¿µÄ¹¤×÷¡£´¦ÀíÆ÷ºÍÓ²ÅÌÖ®¼äµÄÐÔÄܲîÒìʹµÃ´ËÀàÁîÈËÍ·Í´µÄÐÐΪÏÔ¶øÒ×¼û¡£
ÊÂʵÉÏ£¬Èç¹ûÓû§¿Õ¼äÓ¦ÓóÌÐò·¢³öwrite()ϵͳµ÷Óã¬LinuxÄں˻áÏȽøÐÐÈ ......
¶ÔLinuxÄÚºËÖнø³ÌÉÏÏÂÎĺÍÖжÏÉÏÏÂÎĵÄÀí½â
2010Äê3ÔÂ3ÈÕ 10:51 ά¿â¿ª·¢Íø ×÷ ÕߣºÑî˶,»ªÇåÔ¶¼ûǶÈëʽѧԺ½²Ê¦
Äں˿ռäºÍÓû§¿Õ¼äÊDzÙ×÷ϵͳÀíÂ۵Ļù´¡Ö®Ò»£¬¼´Äں˹¦ÄÜÄ£¿éÔËÐÐÔÚÄں˿ռ䣬¶øÓ¦ÓóÌÐòÔËÐÐÔÚÓû§¿Õ¼ä¡£ÏÖ´úµÄCPU¶¼¾ßÓв»Í¬ ......