Ïê½âLinuxÄÚºË֮˫ÏòÑ»·Á´±í(ת)
ÕªÒª: ±¾ÎÄÏê½âÁËÄÚºËÖÐÃæÏò¶ÔÏóµÄlist½á¹¹µÄÔÀí£¬ÒÔ¼°ÈçºÎÒÔlistΪÄÚǶ¶ÔÏóÀ´¹¹Ôì×Ô¼ºµÄÁ´±í½á¹¹£¬ÈçºÎ´ÓÄÚǶlist¶ÔÏó»ñµÃ×Ô¶¨ÒåµÄ¶ÔÏóÖ¸Õ룻̽ÌÖÁ˸÷ÖÖºê»òÕߺ¯ÊýµÄÏêϸʹÓ÷½·¨¼°ÔõÑùÒÔͨÓÃlist½á¹¹À´²Ù×÷×Ô¶¨Òå¶ÔÏó¡£
¹Ø¼ü×Ö:Ë«ÏòÑ»·Á´±í£¬list£¬list_entry£¬typeof£¬containerof£¬list_for_each,list_for_each_entry
1¡¢Ë«Ñ»·Á´±í´«Í³ÊµÏÖ
2¡¢LinuxÄÚºËÖÐ˫ѻ·Á´±íʵÏÖ
3¡¢¶¨ÒåºÍ³õʼ»¯
4¡¢Í¨ÓÃÁ´±í²Ù×÷½Ó¿Ú
4.1Ìí¼Ó½Úµã 4.2ɾ³ý½Úµã 4.3ÒÆ¶¯½Úµã 4.4Á´±íÅÐ¿Õ 4.5Á´±íºÏ²¢
5¡¢»ñÈ¡ËÞÖ÷¶ÔÏóÖ¸Õë
6¡¢±éÀú
6.1 List-headÁ´±í±éÀú 6.2±éÀúËÞÖ÷¶ÔÏó
7¡¢ÈçºÎʹÓÃLinuxÖеÄ˫ѻ·Á´±í
1¡¢Ë«Ñ»·Á´±í´«Í³ÊµÏÖ
ÔÚ´«Í³µÄ˫ѻ·Á´±íʵÏÖÖУ¬Èç¹û´´½¨Ä³ÖÖÊý¾Ý½á¹¹µÄ˫ѻ·Á´±í£¬Í¨³£²ÉÓõİ취ÊÇÔÚÕâ¸öÊý¾Ý½á¹¹µÄÀàÐͶ¨ÒåÖмÓÈëÁ½¸ö£¨Ö¸Ïò¸ÃÀàÐͶÔÏóµÄ£©Ö¸ÕënextºÍprev¡£ÀýÈ磺
typedef struct foo {
…
struct foo *prev;
struct foo *next;
…
} foo_t;
ÕâÀï¸ø³öÁ˶ÔÓ¦µÄ½Úµã½á¹¹¡¢¿ÕµÄ˫ѻ·Á´±íºÍ·Ç¿ÕµÄ˫ѻ·Á´±íʾÒâͼ¡£
2¡¢LinuxÄÚºËÖÐ˫ѻ·Á´±íʵÏÖ
ÔÚlinuxÄÚºËÖУ¬ÓдóÁ¿µÄÊý¾Ý½á¹¹ÐèÒªÓõ½Ë«Ñ»·Á´±í£¬ÀýÈç½ø³Ì¡¢Îļþ¡¢Ä£¿é¡¢Ò³ÃæµÈ¡£Èô²ÉÓÃ˫ѻ·Á´±íµÄ´«Í³ÊµÏÖ·½Ê½£¬ÐèҪΪÕâЩÊý¾Ý½á¹¹Î¬»¤¸÷×ÔµÄÁ´±í£¬²¢ÇÒΪÿ¸öÁ´±í¶¼ÒªÉè¼Æ²åÈ롢ɾ³ýµÈ²Ù×÷º¯Êý¡£ÒòΪÓÃÀ´Î¬³ÖÁ´±íµÄnextºÍprevÖ¸ÕëÖ¸Ïò¶ÔÓ¦ÀàÐ͵ĶÔÏó£¬Òò´ËÒ»ÖÖÊý¾Ý½á¹¹µÄÁ´±í²Ù×÷º¯Êý²»ÄÜÓÃÓÚ²Ù×÷ÆäËüÊý¾Ý½á¹¹µÄÁ´±í¡£
ÔÚLinuxÔ´´úÂëÊ÷µÄinclude/linux/list.hÎļþÖУ¬²ÉÓÃÁËÒ»ÖÖÀàÐÍÎ޹صÄ˫ѻ·Á´±íʵÏÖ·½Ê½¡£Æä˼ÏëÊǽ«Ö¸ÕëprevºÍnext´Ó¾ßÌåµÄÊý¾Ý½á¹¹ÖÐÌáÈ¡³öÀ´¹¹³ÉÒ»ÖÖͨÓõÄ"Ë«Á´±í"Êý¾Ý½á¹¹list_head¡£Èç¹ûÐèÒª¹¹ÔìijÀà¶ÔÏóµÄÌØ¶¨Á´±í£¬ÔòÔÚÆä½á¹¹£¨±»³ÆÎªËÞÖ÷Êý¾Ý½á¹¹£©Öж¨ÒåÒ»¸öÀàÐÍΪlist_headÀàÐ͵ijÉÔ±£¬Í¨¹ýÕâ¸ö³ÉÔ±½«ÕâÀà¶ÔÏóÁ¬½ÓÆðÀ´£¬ÐγÉËùÐèÁ´±í£¬²¢Í¨¹ýͨÓÃÁ´±íº¯Êý¶ÔÆä½øÐвÙ×÷¡£ÆäÓŵãÊÇÖ»Ðè±àдͨÓÃÁ´±íº¯Êý£¬¼´¿É¹¹ÔìºÍ²Ù×÷²»Í¬¶ÔÏóµÄÁ´±í£¬¶øÎÞÐèΪÿÀà¶ÔÏóµÄÿÖÖÁбí±àдרÓú¯Êý£¬ÊµÏÖÁË´úÂëµÄÖØÓá£
list_head½á¹¹
-----------struct list_head{}¼°³õʼ»¯ºê---------
struct list_head
{
 
Ïà¹ØÎĵµ£º
IDTµÄ³õ²½³õʼ»¯
ÔÚʵģʽʱ£¬idt±»³õʼ»¯²¢ÓÉbiosÀý³ÌʹÓá£Ò»µ©linux½Ó¹Ü£¬idt¾Í±»ÒƵ½ramµÄÁíÒ»¸öÇøÓò£¬²¢½øÐеڶþ´Î³õʼ»¯£¬ÒòΪlinuxûÓÐÀûÓÃÈκÎbiosÀý³Ì¡£
IDT´æ·ÅÔÚidt_table±íÖУ¬ÓÐ256¸ö±íÏî¡£6×Ö½ÚµÄidt_descr±äÁ¿Ö¸¶¨ÁËidtµÄ´óСºÍËüµÄµØÖ·£¬Ö»Óе±ÄÚºËÓÃlidt»ã±àÖ¸Áî³õʼ»¯idtr¼Ä´æÆ÷ʱ²ÅÓõ½Õâ¸ö±äÁ¿¡£
ÔÚ ......
ÐźÅÖ¸¶¨´¦Àíº¯Êý
void (*signal (int signum,void (*handle)(int)))(int);ÉèÖÃij¸öÐźŵĴ¦Àí·½·¨
int sigaction(int signum,const struct sigaction *act,struct sigaction *oldact);ÓÃÓÚ¼ì²é»ò¸Ä±ä½ø³ÌÔÚ½Óµ½ÐźÅʱµÄ¶¯×÷
Ðźż¯²Ù×÷º¯Êý
static inline void sigaddset(sigset_t *set,int _sig);
static inline voi ......
Shell: bash¡£Ëü½áºÏÁË csh ºÍ ksh µÄÓŵ㣬²¢ÇÒÓÐ readline ¹¦ÄÜ£¬Äã¿ÉÒÔËæÒâ°ó¶¨×Ô¼ºµÄ¼üÅÌ¡£
±à¼Æ÷£º VIM, Emacs¡£
³ÌÐò¿ª·¢£º GCC, make, ld, Scheme48, j2sdk, Perl, Python, Tcl/Tk ...
ÂÛÎÄ£¬»ÃµÆ¹¤¾ß£ºLaTeX, ConTeXt
»æÍ¼¹¤¾ß£ºMetaPost¡£Õâ¸öÓïÑÔ̫ǿÁË£¬ÒÔÖÁÓÚÎÒÖ»ÓÃËüÁË¡£Äã²»ÊìϤµÄ»°¿ÉÒÔÓÃxfig,dia À´ ......
ÄÚ´æ³Ø(memory pool) ÊÇlinux2.6µÄÒ»¸öеÄÌØÐÔ¡£»ù±¾ÉϽ«£¬Ò»¸öÄÚ´æ³ØÔÊÐíÒ»¸öÄں˳ɷ֣¬Èç¿éÉ豸×Óϵͳ£¬½öÔÚÄÚ´æ²»×ãµÄ½ô¼±Çé¿öÏ·ÖÅäһЩ¶¯Ì¬ÄÚ´æÀ´Ê¹Óá£
ÄÚ´æ³ØÊǶ¯Ì¬ÄÚ´æµÄ´¢±¸£¬Ö»Äܱ»Ìض¨µÄÄں˳ɷ֣¨¼´³ØµÄ“ÓµÓÐÕß”£©Ê¹Óá£ÓµÓÐÕßͨ³£²»Ê¹Óô¢±¸£»µ«ÊÇ£¬Èç¹û¶¯Ì¬ÄÚ´æ±äµÃ¼«ÆäÏ¡ÓÐÒÔÖÁÓÚËùÓÐÆÕͨÄÚ
......
»ã±àÓïÑÔµÄÓŵãÊÇËٶȿ죬¿ÉÒÔÖ±½Ó¶ÔÓ²¼þ½øÐвÙ×÷£¬Õâ¶ÔÖîÈçͼÐδ¦ÀíµÈ¹Ø¼üÓ¦ÓÃÊǷdz£ÖØÒªµÄ¡£Linux ÊÇÒ»¸öÓà C ÓïÑÔ¿ª·¢µÄ²Ù×÷ϵͳ£¬ÕâʹµÃºÜ¶à³ÌÐòÔ±¿ªÊ¼Íü¼ÇÔÚ Linux Öл¹¿ÉÒÔÖ±½ÓʹÓûã±àÕâÒ»µ×²ãÓïÑÔÀ´ÓÅ»¯³ÌÐòµÄÐÔÄÜ¡£±¾ÎÄΪÄÇЩÔÚLinux ƽ̨Éϱàд»ã±à´úÂëµÄ³ÌÐòÔ±ÌṩָÄÏ£¬½éÉÜ Linux »ã±àÓïÑÔµÄÓï·¨¸ñʽºÍ¿ª·¢¹¤¾ ......