| access£¨ÅжÏÊÇ·ñ¾ßÓдæÈ¡ÎļþµÄȨÏÞ£© |
Ïà¹Øº¯Êý | stat£¬open£¬chmod£¬chown£¬setuid£¬setgidWZ6LinuxÁªÃË
|
±íÍ·Îļþ | #include<unistd.h>WZ6LinuxÁªÃË
|
¶¨Ò庯Êý | int access(const char * pathname,int mode);WZ6LinuxÁªÃË
|
º¯Êý˵Ã÷ | access()»á¼ì²éÊÇ·ñ¿ÉÒÔ¶Á/дijһÒÑ´æÔÚµÄÎļþ¡£²ÎÊýmodeÓм¸ÖÖÇé¿ö×éºÏ£¬R_OK£¬W_OK£¬X_OK ºÍF_OK¡£R_OK£¬W_OKÓëX_OKÓÃÀ´¼ì²éÎļþÊÇ·ñ¾ßÓжÁÈ¡¡¢Ð´ÈëºÍÖ´ÐеÄȨÏÞ¡£F_OKÔòÊÇÓÃÀ´ÅжϸÃÎļþÊÇ·ñ´æÔÚ¡£ÓÉÓÚaccess()Ö»×÷ȨÏ޵ĺ˲飬²¢²»Àí»áÎļþÐÎ̬»òÎļþÄÚÈÝ£¬Òò´Ë£¬Èç¹ûһĿ¼±íʾΪ¡°¿ÉдÈ롱£¬±íʾ¿ÉÒÔÔÚ¸ÃĿ¼Öн¨Á¢ÐÂÎļþµÈ²Ù×÷£¬¶ø·ÇÒâζ´ËĿ¼¿ÉÒÔ±»µ±×öÎļþ´¦Àí¡£ÀýÈ磬Äã»á·¢ÏÖDOSµÄÎļþ¶¼¾ßÓС°¿ÉÖ´ÐС±È¨ÏÞ£¬µ«ÓÃexecve()Ö´ÐÐʱÔò»áʧ°Ü¡£WZ6LinuxÁªÃË
|
·µ»ØÖµ | ÈôËùÓÐÓû²éºËµÄȨÏÞ¶¼Í¨¹ýÁ˼ì²éÔò·µ»Ø0Öµ£¬±íʾ³É¹¦£¬Ö»ÒªÓÐһȨÏÞ±»½ûÖ¹Ôò·µ»Ø-1¡£WZ6LinuxÁªÃË
|
´íÎó´úÂë | EACCESS ²ÎÊýpathname ËùÖ¸¶¨µÄÎļþ²»·ûºÏËùÒªÇó²âÊÔµÄȨÏÞ¡£WZ6LinuxÁªÃË EROFS Óû²âÊÔдÈëȨÏÞµÄÎļþ´æÔÚÓÚÖ»¶ÁÎļþϵͳÄÚ¡£WZ6LinuxÁªÃË EFAULT ²ÎÊýpathnameÖ¸Õ볬³ö¿É´æÈ¡ÄÚ´æ¿Õ¼ä¡£WZ6LinuxÁªÃË EINVAL ²ÎÊýmode ²»ÕýÈ·¡£WZ6LinuxÁªÃË ENAMETOOLONG ²ÎÊýpathnameÌ«³¤¡£WZ6LinuxÁªÃË ENOTDIR ²ÎÊýpathnameΪһĿ¼¡£WZ6LinuxÁªÃË ENOMEM ºËÐÄÄÚ´æ²»×ãWZ6LinuxÁªÃË ELOOP ²ÎÊýpathnameÓйý¶à·ûºÅÁ¬½ÓÎÊÌâ¡£WZ6LinuxÁªÃË EIO I/O ´æÈ¡´íÎó¡£WZ6LinuxÁªÃË
|
¸½¼Ó˵Ã÷ | ʹÓÃaccess()×÷Óû§ÈÏÖ¤·½ÃæµÄÅжÏÒªÌØ±ðСÐÄ£¬ÀýÈçÔÚaccess()ºóÔÙ×öopen()µÄ¿ÕÎļþ¿ÉÄÜ»áÔì³Éϵͳ°²È«ÉϵÄÎÊÌâ¡£WZ6LinuxÁªÃË
|
·¶Àý | /* ÅжÏÊÇ·ñÔÊÐí¶ÁÈ¡/etc/passwd */WZ6LinuxÁªÃË #include<unistd.h>WZ6LinuxÁªÃË int main()WZ6LinuxÁªÃË {WZ6LinuxÁªÃË if (access(¡°/etc/passwd¡±,R_OK) = =0)WZ6LinuxÁªÃË printf(¡°/etc/passwd can be readn¡±);WZ6LinuxÁªÃË }WZ6LinuxÁªÃË
|
Ö´ÐÐ | /etc/passwd can be readWZ6LinuxÁªÃË
|
| ¡¡ |
WZ6LinuxÁªÃË
| WZ6LinuxÁªÃË alphasort£¨ÒÀ×Öĸ˳ÐòÅÅÐòĿ¼½á¹¹£© |
Ïà¹Øº¯Êý | scandir£¬qsortWZ6LinuxÁªÃË
|
±íÍ·Îļþ | #include<dirent.h>WZ6LinuxÁªÃË
|
¶¨Ò庯Êý | int alphasort(const struct dirent **a,const struct dirent **b);WZ6LinuxÁªÃË
|
º¯Êý˵Ã÷ | alphasort()Ϊscandir()×îºóµ÷ÓÃqsort()º¯Êýʱ´«¸øqsort()×÷ΪÅжϵĺ¯Êý£¬Ïêϸ˵Ã÷Çë²Î¿¼scandir()¼°qsort()¡£WZ6LinuxÁªÃË
|
·µ»ØÖµ | ²Î¿¼qsort()¡£WZ6LinuxÁªÃË
|
·¶Àý | /* ¶ÁÈ¡/Ŀ¼ÏÂËùÓеÄĿ¼½á¹¹£¬²¢ÒÀ×Öĸ˳ÐòÅÅÁÐ*/WZ6LinuxÁªÃË main()WZ6LinuxÁªÃË {WZ6LinuxÁªÃË struct dirent **namelist;WZ6LinuxÁªÃË int i,total;WZ6LinuxÁªÃË total = scandir(¡°/¡±,&namelist ,0,alphasort);WZ6LinuxÁªÃË if(total <0)WZ6LinuxÁªÃË perror(¡°scandir¡±);WZ6LinuxÁªÃË else{WZ6LinuxÁªÃË for(i=0;i<total;i++)WZ6LinuxÁªÃË printf(¡°%sn¡±,namelist[i]->d_name);WZ6LinuxÁªÃË printf(¡°total = %dn¡±,total);WZ6LinuxÁªÃË }WZ6LinuxÁªÃË }WZ6LinuxÁªÃË
|
Ö´ÐÐ | ..WZ6LinuxÁªÃË .gnomeWZ6LinuxÁªÃË .gnome_privateWZ6LinuxÁªÃË ErrorLogWZ6LinuxÁªÃË WeblogWZ6LinuxÁªÃË binWZ6LinuxÁªÃË bootWZ6LinuxÁªÃË devWZ6LinuxÁªÃË doscWZ6LinuxÁªÃË dosdWZ6LinuxÁªÃË etcWZ6LinuxÁªÃË homeWZ6LinuxÁªÃË libWZ6LinuxÁªÃË lost+foundWZ6LinuxÁªÃË miscWZ6LinuxÁªÃË mntWZ6LinuxÁªÃË optWZ6LinuxÁªÃË procWZ6LinuxÁªÃË rootWZ6LinuxÁªÃË sbinWZ6LinuxÁªÃË tmpWZ6LinuxÁªÃË usrWZ6LinuxÁªÃË varWZ6LinuxÁªÃË total = 24WZ6LinuxÁªÃË
|
| ¡¡ |
WZ6LinuxÁªÃË
| WZ6LinuxÁªÃË chdir£¨¸Ä±äµ±Ç°µÄ¹¤×÷£¨Ä¿Â¼£© |
Ïà¹Øº¯Êý | getcwd£¬chrootWZ6LinuxÁªÃË
|
±íÍ·Îļþ | #include<unistd.h>WZ6LinuxÁªÃË
|
¶¨Ò庯Êý | int chdir(const char * path);WZ6LinuxÁªÃË
|
º¯Êý˵Ã÷ | chdir()ÓÃÀ´½«µ±Ç°µÄ¹¤×÷Ŀ¼¸Ä±ä³ÉÒÔ²ÎÊýpathËùÖ¸µÄĿ¼¡£WZ6LinuxÁªÃË
|
·µ»ØÖµ | Ö´Ðгɹ¦Ôò·µ»Ø0£¬Ê§°Ü·µ»Ø-1£¬errnoΪ´íÎó´úÂë¡£WZ6LinuxÁªÃË
|
·¶Àý | #include<unistd.h>WZ6LinuxÁªÃË main()WZ6LinuxÁªÃË {WZ6LinuxÁªÃË chdir(¡°/tmp¡±);WZ6LinuxÁªÃË printf(¡°current working directory: %sn¡±,getcwd(NULL,NULL));WZ6LinuxÁªÃË }WZ6LinuxÁªÃË
|
Ö´ÐÐ | current working directory :/tmpWZ6LinuxÁªÃË
|
| ¡¡ |
WZ6LinuxÁªÃË
| WZ6LinuxÁªÃË chmod£¨¸Ä±äÎļþµÄȨÏÞ£© |
Ïà¹Øº¯Êý | fchmod£¬stat£¬open£¬chownWZ6LinuxÁªÃË
|
±íÍ·Îļþ | #include<sys/types.h>WZ6LinuxÁªÃË #include<sys/stat.h>WZ6LinuxÁªÃË
|
¶¨Ò庯Êý | int chmod(const char * path,mode_t mode);WZ6LinuxÁªÃË
|
º¯Êý˵Ã÷ | chmod()»áÒÀ²ÎÊýmode ȨÏÞÀ´¸ü¸Ä²ÎÊýpath Ö¸¶¨ÎļþµÄȨÏÞ¡£WZ6LinuxÁªÃË
|
²ÎÊý | mode ÓÐÏÂÁÐÊýÖÖ×éºÏWZ6LinuxÁªÃË S_ISUID 04000 ÎļþµÄ£¨set user-id on execution£©Î»WZ6LinuxÁªÃË S_ISGID 02000 ÎļþµÄ£¨set group-id on execution£©Î»WZ6LinuxÁªÃË S_ISVTX 01000 ÎļþµÄstickyλWZ6LinuxÁªÃË S_IRUSR£¨S_IREAD£© 00400 ÎļþËùÓÐÕ߾߿ɶÁȡȨÏÞWZ6LinuxÁªÃË S_IWUSR£¨S_IWRITE£©00200 ÎļþËùÓÐÕ߾߿ÉдÈëȨÏÞWZ6LinuxÁªÃË S_IXUSR£¨S_IEXEC£© 00100 ÎļþËùÓÐÕ߾߿ÉÖ´ÐÐȨÏÞWZ6LinuxÁªÃË S_IRGRP 00040 Óû§×é¾ß¿É¶ÁȡȨÏÞWZ6LinuxÁªÃË S_IWGRP 00020 Óû§×é¾ß¿ÉдÈëȨÏÞWZ6LinuxÁªÃË S_IXGRP 00010 Óû§×é¾ß¿ÉÖ´ÐÐȨÏÞWZ6LinuxÁªÃË S_IROTH 00004 ÆäËûÓû§¾ß¿É¶ÁȡȨÏÞWZ6LinuxÁªÃË S_IWOTH 00002 ÆäËûÓû§¾ß¿ÉдÈëȨÏÞWZ6LinuxÁªÃË S_IXOTH 00001 ÆäËûÓû§¾ß¿ÉÖ´ÐÐȨÏÞWZ6LinuxÁªÃË Ö»ÓиÃÎļþµÄËùÓÐÕß»òÓÐЧÓû§Ê¶±ðÂëΪ0£¬²Å¿ÉÒÔÐ޸ĸÃÎļþȨÏÞ¡£»ùÓÚϵͳ°²È«£¬Èç¹ûÓû½«Êý¾ÝдÈëÒ»Ö´ÐÐÎļþ£¬¶ø¸ÃÖ´ÐÐÎļþ¾ßÓÐS_ISUID »òS_ISGID ȨÏÞ£¬ÔòÕâÁ½¸öλ»á±»Çå³ý¡£Èç¹ûһĿ¼¾ßÓÐS_ISUID λȨÏÞ£¬±íʾÔÚ´ËĿ¼ÏÂÖ»ÓиÃÎļþµÄËùÓÐÕß»òroot¿ÉÒÔɾ³ý¸ÃÎļþ¡£WZ6LinuxÁªÃË
|
·µ»ØÖµ | ȨÏ޸ıä³É¹¦·µ»Ø0£¬Ê§°Ü·µ»Ø-1£¬´íÎóÔÒò´æÓÚerrno¡£WZ6LinuxÁªÃË
|
´íÎó´úÂë | EPERM ½ø³ÌµÄÓÐЧÓû§Ê¶±ðÂëÓëÓûÐÞ¸ÄȨÏÞµÄÎļþÓµÓÐÕß²»Í¬£¬¶øÇÒÒ²²»¾ßrootȨÏÞ¡£WZ6LinuxÁªÃË EACCESS ²ÎÊýpathËùÖ¸¶¨µÄÎļþÎÞ·¨´æÈ¡¡£WZ6LinuxÁªÃË EROFS ÓûдÈëȨÏÞµÄÎļþ´æÔÚÓÚÖ»¶ÁÎļþϵͳÄÚ¡£WZ6LinuxÁªÃË EFAULT ²ÎÊýpathÖ¸Õ볬³ö¿É´æÈ¡ÄÚ´æ¿Õ¼ä¡£WZ6LinuxÁªÃË EINVAL ²ÎÊýmode²»ÕýÈ·WZ6LinuxÁªÃË ENAMETOOLONG ²ÎÊýpathÌ«³¤WZ6LinuxÁªÃË ENOENT Ö¸¶¨µÄÎļþ²»´æÔÚWZ6LinuxÁªÃË ENOTDIR ²ÎÊýpath·¾¶²¢·ÇһĿ¼WZ6LinuxÁªÃË ENOMEM ºËÐÄÄÚ´æ²»×ãWZ6LinuxÁªÃË ELOOP ²ÎÊýpathÓйý¶à·ûºÅÁ¬½ÓÎÊÌâ¡
LinuxÁªÃËÊÕ¼¯ÕûÀí ,תÌùÇë±êÃ÷ÔʼÁ´½Ó,ÈçÓÐÈκÎÒÉÎÊ»¶ÓÀ´±¾Õ¾LinuxÂÛ̳ÌÖÂÛ |
|
|
|
|