LinuxÄÇЩʶùÖ®ÎÒÊÇSysfs(8)Ò»Æðɢɢ²½ pathwalk
Ç°ÃæËµ¹ý£¬Ö»ÒªÖªµÀÎļþµÄË÷Òý½ÚµãºÅ£¬¾Í¿ÉÒԵõ½ÄǸöÎļþ¡£µ«ÊÇÎÒÃÇÔÚ²Ù×÷Îļþʱ£¬´ÓûÌý˵˻áÄÃ×ÅË÷Òý½ÚµãºÅÀ´²Ù×÷Îļþ£¬ÎÒÃÇÖ»ÖªµÀÎļþÃû¶øÒÑ¡£ ËüÃÇÊÇÈçºÎ"ºÍг"ÆðÀ´µÄÄØ£¿linux°ÑĿ¼Ҳ¿´³ÉÒ»ÖÖÎļþ£¬ÀïÃæ¼Ç¼×ÅÎļþÃûÓëË÷Òý½ÚµãºÅµÄ¶ÔÓ¦¹ØÏµ£¨Ä¿Â¼´æÔÚµÄÔÒò£©¡£±ÈÈçÔÚext3ÎļþϵͳÖУ¬Èç¹ûÎļþÊÇÒ»¸öÄ¿ ¼£¬ÄÇôËüµÄÄÚÈݾÍÊÇһϵÁÐext3_dir_entry_2µÄ½á¹¹
struct ext3_dir_entry_2 {
__u32 inode; /* Inode number */
__u16 rec_len; /* Directory entry length */
__u8 name_len; /* Name length */
__u8 file_type;
char name[EXT3_NAME_LEN]; /* File name */
};
¾Ù ¸öÀý×Ó£¬±ÈÈçÒª´ò¿ª/home/test/hello.c¡£Ê×ÏÈ£¬ÕÒµ½‘/’£¬¶ÁÈëÆäÄÚÈÝ£¬ÕÒµ½ÃûΪ"home"µÄÎļþµÄË÷Òý½ÚµãºÅ£¬´ò¿ª/homeÕâ¸ö "Îļþ"£¬¶ÁÈëÄÚÈÝ£¬ÕÒµ½ÃûΪ "test" µÄµÄÎļþµÄË÷Òý½ÚµãºÅ£¬Í¬Àí£¬ÔÙ´ò¿ªÎļþ"/home/test"£¬ÕÒµ½ÕÒµ½ÃûΪ"hello.c”µÄÎļþµÄË÷Òý½ÚµãºÅ£¬×îºó¾ÍµÃµ½ /home/test/hello.cÁË¡£Õâ¾ÍÊÇpath_walk()º¯ÊýµÄÔÀí¡£
ÆäÖУ¬¸ù¾ÝÒ»¸öÎļþ¼ÐµÄinode£¬ºÍÒ»¸öÎļþÃûÀ´»ñÈ¡¸ÃÎļþµÄinode½á¹¹µÄº¯Êý£¬¾Í½Ðlookup£¬ËüÊÇinode_operationsÀïÃæµÄº¯Êý¡£
struct dentry * (*lookup) (struct inode *,struct dentry *, struct nameidata *);
lookup£¬ ¹ËÃû˼Ò壬¾ÍÊDzéÕÒ£¬±ÈÈç²é²éÔÚtestÕâ¸öÎļþ¼ÐÏ£¬ÓÐûÓнÐhello.cµÄÎļþ£¬Óеϰ£¬¾Í´Ó´æ´¢½éÖÊÖжÁÈ¡Æäinode½á¹¹¡£²¢ÓÃdentry- >d_inodeÖ¸ÏòËü¡£ËùÒÔ£¬ÎÒÃÇÖ»ÒªÖªµÀÁËÎļþµÄ·¾¶ºÍÃû×Ö£¬×Ü¿ÉÒÔ´Ó¸ùĿ¼¿ªÊ¼£¬Ò»²ãÒ»²ãµÄÍùÏÂ×ߣ¬¶¨Î»µ½Ä³Ò»¸öÎļþ¡£
superblockÓëvfsmount
½Ó ÏÂÀ´»¹Òª½éÉÜÁ½¸öÊý¾Ý½á¹¹£¬superblockºÍvfsmount¡£super_block½á¹¹ÊÇ´ÓËùÓоßÌåµÄÎļþϵͳËù³éÏó³öÀ´µÄÒ»¸ö½á¹¹£¬Ã¿Ò»¸öÎÄ ¼þϵͳʵÀý¶¼»áÓÐÒ»¶ÔÓ¦super_block½á¹¹¡£±ÈÈçÿһ¸öext2µÄ·ÖÇø¾ÍÓÐÒ»¸ösuper_block½á¹¹£¬Ëü¼Ç¼Á˸ÃÎļþϵͳʵÀý(·ÖÇø)µÄij ЩÃèÊöÐÔµÄÐÅÏ¢£¬±ÈÈç¸ÃÎļþϵͳʵÀýµÄÎļþϵͳÀàÐÍ£¬Óжà´ó£¬´ÅÅÌÉÏÿһ¿éµÄ´óС, »¹ÓоÍÊÇsuper_operations¡£ËüÓëinode£¬dentryÒ»Ñù£¬Ö»ÊÇijЩÄÚÈÝÔÚÄÚ´æÖеÄÓ³Ïñ¡£¾Íext2Îļþϵͳ¶øÑÔ£¬É豸Éϵij
Ïà¹ØÎĵµ£º
2009 Äê 4 ÔÂ 23 ÈÕ
±¾ÎÄÖÐÎÒÃÇÕë¶Ô Linux É϶àÏ̱߳à³ÌµÄÖ÷ÒªÌØÐÔ×ܽá³ö 5 Ìõ¾Ñ飬ÓÃÒÔ¸ÄÉÆ Linux ¶àÏ̱߳à³ÌµÄϰ¹ßºÍ±ÜÃâÆäÖеĿª·¢ÏÝÚå¡£ÔÚ±¾ÎÄÖУ¬ÎÒÃÇ´©²åһЩ Windows µÄ±à³ÌÓÃÀýÓÃÒÔ¶Ô±È Linux ÌØÐÔ£¬ÒÔ¼ÓÉî¶ÁÕßÓ¡Ïó¡£
±³¾°
Linux ƽ̨ÉϵĶàÏ̳߳ÌÐò¿ª·¢Ïà¶ÔÓ¦ÆäËûƽ̨£¨±ÈÈç Windows£©µÄ¶àÏß³Ì API ÓÐһЩϸ΢ ......
Ò»¡¢½ø³Ì¿ØÖÆ£º
fork
´´½¨Ò»¸öнø³Ì
clone
°´Ö¸¶¨Ìõ¼þ´´½¨×Ó
½ø³Ì
execve
ÔËÐпÉÖ´ÐÐÎļþ
exit
ÖÐ
Ö¹½ø³Ì
_exit
Á¢¼´ÖÐÖ¹µ±Ç°½ø³Ì
getdtablesize
½ø
³ÌËùÄÜ´ò¿ªµÄ×î´óÎļþÊý
getpgid
»ñȡָ¶¨½ø³Ì×é±êʶºÅ
setpgid
Éè
ÖÃÖ¸¶¨½ø³Ì×é±êÖ¾ºÅ
getpgrp
»ñÈ¡µ±Ç°½ø³Ì×é±êʶºÅ
setpgrp
Éè
Öõ±Ç°½ø³Ì×é± ......
M. Tim Jones, ¹ËÎʹ¤³Ìʦ, Emulex Corp.
2009 Äê 4 ÔÂ 07 ÈÕ
Linux® ÄÚºËʹÓà GNU Compiler Collection (GCC) Ì×¼þµÄ¼¸¸öÌØÊ⹦ÄÜ¡£ÕâЩ¹¦ÄܰüÀ¨Ìṩ¿ì½Ý·½Ê½ºÍ¼ò»¯ÒÔ¼°Ïò±àÒëÆ÷ÌṩÓÅ»¯ÌáʾµÈµÈ¡£Á˽âÕâÐ©ÌØÊâµÄ GCC ÌØÐÔ£¬Ñ§Ï°ÈçºÎÔÚ Linux ÄÚºËÖÐʹÓÃËüÃÇ¡£
GCC ºÍ Linux ÊdzöÉ«µÄ×éºÏ¡£¾¡¹ÜËüÃÇÊǶÀÁ¢µÄÈí¼þ ......
½ÓÏÂÀ´£¬ÎÒÃǽøÈësysfs²¿·Ö¡£¿´¿´
kobject_add()->create_dir()->sysfs_create_dir()
bus create file->sysfs create file()
. . .
ÕâЩsysfsº¯ÊýµÄÄÚÄ»¡£
˵°×ÁË£¬sysfs¾ÍÊÇÀûÓÃVFSµÄ½Ó¿ÚÈ¥¶ÁдkobjectµÄ²ã´Î½á¹¹£¬½¨Á¢ÆðÀ´µÄÎļþϵͳ¡£¹ØÓÚsysfsµÄÄÚÈݾÍÔÚfs/sysfs/Ï¡£&nbs ......