linux 0.11 ÄÚºËѧϰ ioctl.c
/*
* ioctl.c ÎļþʵÏÖÁËÊäÈë/Êä³ö¿ØÖÆÏµÍ³µ÷ÓÃioctl()£¬¸Ãº¯Êý
* Ö÷ÒªÊǵ÷Óú¯Êýtty_ioctl()¶ÔÖն˵ÄIO½øÐпØÖÆ
*/
/*
* linux/fs/ioctl.c
*
* (C) 1991 Linus Torvalds
*/
#include <string.h>
#include <errno.h>
#include <sys/stat.h>
#include <linux/sched.h>
extern int tty_ioctl(int dev, int cmd, int arg);
typedef int (*ioctl_ptr)(int dev,int cmd,int arg);
/* ¶¨ÒåϵͳÖÐÉ豸ÖÖÊý */
#define NRDEVS ((sizeof (ioctl_table))/(sizeof (ioctl_ptr)))
/* ioctl ²Ù×÷º¯ÊýÖ¸Õë±í */
static ioctl_ptr ioctl_table[]={
NULL, /* nodev */
NULL, /* /dev/mem */
NULL, /* /dev/fd */
NULL, /* /dev/hd */
tty_ioctl, /* /dev/ttyx */
tty_ioctl, /* /dev/tty */
NULL, /* /dev/lp */
NULL}; /* named pipes */
/* ÊäÈëÊä³ö¿ØÖƺ¯Êý */
int sys_ioctl(unsigned int fd, unsigned int cmd, unsigned long arg)
{
struct file * filp;
int dev,mode;
// Èç¹ûÎļþÃèÊö·û³¬³ö¿É´ò¿ªµÄÎļþÊý£¬»òÕß¶ÔÓ¦ÃèÊö·ûµÄÎļþ½á¹¹Ö¸ÕëΪ¿Õ£¬Ôò·µ»Ø³ö´íÂë
if (fd >= NR_OPEN || !(filp = current->filp[fd]))
return -EBADF;
// È¡¶ÔÓ¦ÎļþµÄÊôÐÔ
mode=filp->f_inode->i_mode;
// Èç¹û¸ÃÎļþ²»ÊÇ×Ö·ûÎļþ£¬Ò²²»ÊÇ¿éÉ豸Îļþ£¬Ôò·µ»Ø³ö´íÂë
if (!S_ISCHR(mode) && !S_ISBLK(mode))
return -EINVAL;
// ´Ó×Ö·û»ò¿éÉ豸ÎļþµÄi ½ÚµãÖÐÈ¡É豸ºÅ¡£Èç¹ûÉ豸ºÅ´óÓÚϵͳÏÖÓеÄÉ豸Êý£¬Ôò·µ»Ø³ö´íºÅ
dev = filp->f_inode->i_zone[0];
if (MAJOR(dev) >= NRDEVS)
return -ENODEV;
// Èç¹û¸ÃÉ豸ÔÚioctl º¯ÊýÖ¸Õë±íÖÐûÓжÔÓ¦º¯Êý
if (!ioctl_table[MAJOR(dev)])
return -ENOTTY;
// ·ñÔò·µ»ØÊµ¼Êioctl º¯Êý·µ»ØÂë
return ioctl_table[MAJOR(dev)](dev,cmd,arg);
}
²Î¿¼¡¶linuxÄÚºËÍêȫעÊÍ¡·ºÍÍøÉÏÏà¹ØÎÄÕÂ
Ïà¹ØÎĵµ£º
Æô¶¯/ÖØÆô/Í£Ö¹Ò»¸ö·þÎñ
/etc/init.d/program_name start
±ÈÈçÓʼþ·þÎñÆ÷postfix¿ÉÒÔÕâÑù: sudo /etc/init.d/postfix start
------------------------------------------------
ÉèÖóÌÐòµ½Æô¶¯×éÀ
# chkconfig program_name on
±ÈÈ磺sudo chkconfig postfix on
----------------------------------------------- ......
ÎÒ·¢ÏÖÁËÒ»¸öÍøÕ¾£¬ÓÚÊdz£¹æÈëÇÖ¡£ºÜºÃ£¬ËüµÄFINGER¿ª×Å£¬ÓÚÊÇÎÒ±àÁËÒ»¸öSHELL£¬aaaÕʺÅÊÔµ½zzz£¨ÕâÊÇÎÒ·¢ÏÖµÄÒ»¸öÍøÉϹæÂÉ£¬ÄǾÍÊÇÕʺŵij¤¶ÈÓë¿ÚÁîµÄÇ¿¶È³ÉÕý±È£¬ Èç¹ûÒ»¸öÕʺÅÖ»ÓÐÁ½Èý볤£¬ÄÇËüµÄ¿ÚÁîÒ»°ãÒ²ºÜ¼òµ¥£¬·´Ö®ÒàÈ»£¬¹ÊÇÒ³ÆÖ®ÎªÈôÊ϶¨Àí°É£©£¬½á¹ûÒ»¸öÕʺÅÒ²²»´æÔÚ£¬ÎÒûÓÐÔÙÊÔËüµÄÕʺš£ÒòΪÎÒ±»Ëü¿ªµÄ¶Ë¿ÚÎü ......
Unix/Linux ½ø³Ì¹ÜÀíÏà¹ØÃüÁî½éÉÜ
½ø³ÌÊDzÙ×÷ϵͳÓÃÓÚ¿ØÖÆÏµÍ³×ÊԴʹÓõÄʵÌå¡£Unix/Linux ½ø³Ì¹ÜÀíÏà¹ØµÄÃüÁîÖ÷ÒªÓÐÒÔϼ¸¸ö£¬ÔÚºóÃæµÄ½Å±¾ÊµÏÖÖлáÓõ½²¿·ÖÃüÁî¡£
ÏÔʾ½ø³ÌÊôÐÔÃüÁî
ps ÃüÁ¸ÃÃüÁîÊÇ×î»ù±¾Í¬Ê±Ò²ÊǷdz£Ç¿´óµÄ½ø³Ì²é¿´ÃüÁÓÃÓÚ±¨¸æ½ø³Ì±êʶ¡¢Óû§¡¢CPU ʱ¼äÏûºÄÒÔ¼°ÆäËûÊôÐÔ¡£ÀûÓÃËü¿ÉÒÔÈ·¶¨ÓÐÄÄÐ ......
GDBÊÇGNU¿ªÔ´×éÖ¯·¢²¼µÄÒ»¸öÇ¿´óµÄUNIXϵijÌÐòµ÷ÊÔ¹¤¾ß¡£»òÐí£¬¸÷λ±È½Ïϲ»¶ÄÇÖÖͼÐÎ
½çÃæ·½Ê½µÄ£¬ÏñVC¡¢BCBµÈIDEµÄµ÷ÊÔ£¬µ«Èç¹ûÄãÊÇÔÚUNIXƽ̨ÏÂ×öÈí¼þ£¬Äã»á·¢ÏÖGDBÕâ¸ö
µ÷ÊÔ¹¤¾ßÓбÈVC¡¢BCBµÄͼÐλ¯µ÷ÊÔÆ÷¸üÇ¿´óµÄ¹¦ÄÜ¡£Ëùν“´çÓÐËù³¤£¬³ßÓÐËù¶Ì”¾ÍÊÇÕâ
¸öµÀÀí¡£
Ò» ......
/*
* linux/fs/bitmap.c
*
* (C) 1991 Linus Torvalds
*/
/* bitmap.c contains the code that handles the inode and block bitmaps */
#include <string.h>
#include <linux/sched.h>
#include <linux/kernel.h> // һЩÄں˳£Óú¯ÊýµÄÔÐζ¨Òå
......