|
£hw5LinuxÁªÃË EROFS ÓûдÈëȨÏÞµÄÎļþ´æÔÚÓÚÖ»¶ÁÎļþϵͳÄÚ¡£hw5LinuxÁªÃË EIO I/O ´æÈ¡´íÎó¡£hw5LinuxÁªÃË
|
·¶Àý | #include<sys/stat.h>hw5LinuxÁªÃË #include<fcntl.h>hw5LinuxÁªÃË main()hw5LinuxÁªÃË {hw5LinuxÁªÃË int fd;hw5LinuxÁªÃË fd = open (¡°/etc/passwd¡±,O_RDONLY);hw5LinuxÁªÃË fchmod(fd,S_IRUSR|S_IWUSR|S_IRGRP|S_IROTH);hw5LinuxÁªÃË close(fd);hw5LinuxÁªÃË }hw5LinuxÁªÃË
|
| ¡¡ |
hw5LinuxÁªÃË
| hw5LinuxÁªÃË fchown£¨¸Ä±äÎļþµÄËùÓÐÕߣ© |
Ïà¹Øº¯Êý | chown£¬lchown£¬chmodhw5LinuxÁªÃË
|
±íÍ·Îļþ | #include<sys/types.h>hw5LinuxÁªÃË #include<unistd.h>hw5LinuxÁªÃË
|
¶¨Ò庯Êý | int fchown(int fd,uid_t owner,gid_t group);hw5LinuxÁªÃË
|
º¯Êý˵Ã÷ | fchown()»á½«²ÎÊýfdÖ¸¶¨ÎļþµÄËùÓÐÕß±ä¸üΪ²ÎÊýowner´ú±íµÄÓû§£¬¶ø½«¸ÃÎļþµÄ×é±ä¸üΪ²ÎÊýgroup×é¡£Èç¹û²ÎÊýowner»ògroupΪ-1£¬¶ÔÓ³µÄËùÓÐÕß»ò×éÓÐËù¸Ä±ä¡£²ÎÊýfd ΪÒÑ´ò¿ªµÄÎļþÃèÊö´Ê¡£µ±rootÓÃfchown()¸Ä±äÎļþËùÓÐÕß»ò×éʱ£¬¸ÃÎļþÈô¾ßS_ISUID»òS_ISGIDȨÏÞ£¬Ôò»áÇå³ý´ËȨÏÞλ¡£hw5LinuxÁªÃË
|
·µ»ØÖµ | ³É¹¦Ôò·µ»Ø0£¬Ê§°ÜÔò·µ»Ø-1£¬´íÎóÔÒò´æÓÚerrno¡£hw5LinuxÁªÃË
|
´íÎó´úÂë | EBADF ²ÎÊýfdÎļþÃèÊö´ÊΪÎÞЧµÄ»ò¸ÃÎļþÒѹرա£hw5LinuxÁªÃË EPERM ½ø³ÌµÄÓÐЧÓû§Ê¶±ðÂëÓëÓûÐÞ¸ÄȨÏÞµÄÎļþËùÓÐÕß²»Í¬£¬¶øÇÒÒ²²»¾ßrootȨÏÞ£¬»òÊDzÎÊýowner¡¢group²»ÕýÈ·¡£hw5LinuxÁªÃË EROFS ÓûдÈëµÄÎļþ´æÔÚÓÚÖ»¶ÁÎļþϵͳÄÚ¡£hw5LinuxÁªÃË ENOENT Ö¸¶¨µÄÎļþ²»´æÔÚhw5LinuxÁªÃË EIO I/O´æÈ¡´íÎóhw5LinuxÁªÃË
|
·¶Àý | #include<sys/types.h>hw5LinuxÁªÃË #include<unistd.h>hw5LinuxÁªÃË #include<fcntl.h>hw5LinuxÁªÃË main()hw5LinuxÁªÃË {hw5LinuxÁªÃË int fd;hw5LinuxÁªÃË fd = open (¡°/etc/passwd¡±,O_RDONLY);hw5LinuxÁªÃË chown(fd,0,0);hw5LinuxÁªÃË close(fd);hw5LinuxÁªÃË }hw5LinuxÁªÃË
|
| ¡¡ |
hw5LinuxÁªÃË
| hw5LinuxÁªÃË fstat£¨ÓÉÎļþÃèÊö´ÊÈ¡µÃÎļþ״̬£© |
Ïà¹Øº¯Êý | stat£¬lstat£¬chmod£¬chown£¬readlink£¬utimehw5LinuxÁªÃË
|
±íÍ·Îļþ | #include<sys/stat.h>hw5LinuxÁªÃË #include<unistd.h>hw5LinuxÁªÃË
|
¶¨Ò庯Êý | int fstat(int fildes,struct stat *buf);hw5LinuxÁªÃË
|
º¯Êý˵Ã÷ | fstat()ÓÃÀ´½«²ÎÊýfildesËùÖ¸µÄÎļþ״̬£¬¸´ÖƵ½²ÎÊýbufËùÖ¸µÄ½á¹¹ÖÐ(struct stat)¡£Fstat()Óëstat()×÷ÓÃÍêÈ«Ïàͬ£¬²»Í¬´¦ÔÚÓÚ´«ÈëµÄ²ÎÊýΪÒÑ´ò¿ªµÄÎļþÃèÊö´Ê¡£ÏêϸÄÚÈÝÇë²Î¿¼stat()¡£hw5LinuxÁªÃË
|
·µ»ØÖµ | Ö´Ðгɹ¦Ôò·µ»Ø0£¬Ê§°Ü·µ»Ø-1£¬´íÎó´úÂë´æÓÚerrno¡£hw5LinuxÁªÃË
|
·¶Àý | #include<sys/stat.h>hw5LinuxÁªÃË #include<unistd.h>hw5LinuxÁªÃË #include<fcntk.h>hw5LinuxÁªÃË main()hw5LinuxÁªÃË {hw5LinuxÁªÃË struct stat buf;hw5LinuxÁªÃË int fd;hw5LinuxÁªÃË fd = open (¡°/etc/passwd¡±,O_RDONLY);hw5LinuxÁªÃË fstat(fd,&buf);hw5LinuxÁªÃË printf(¡°/etc/passwd file size +%dn ¡°,buf.st_size);hw5LinuxÁªÃË }hw5LinuxÁªÃË
|
Ö´ÐÐ | /etc/passwd file size = 705hw5LinuxÁªÃË
|
| ¡¡ |
hw5LinuxÁªÃË
| hw5LinuxÁªÃË ftruncate£¨¸Ä±äÎļþ´óС£© |
Ïà¹Øº¯Êý | open£¬truncatehw5LinuxÁªÃË
|
±íÍ·Îļþ | #include<unistd.h>hw5LinuxÁªÃË
|
¶¨Ò庯Êý | int ftruncate(int fd,off_t length);hw5LinuxÁªÃË
|
º¯Êý˵Ã÷ | ftruncate()»á½«²ÎÊýfdÖ¸¶¨µÄÎļþ´óС¸ÄΪ²ÎÊýlengthÖ¸¶¨µÄ´óС¡£²ÎÊýfdΪÒÑ´ò¿ªµÄÎļþÃèÊö´Ê£¬¶øÇÒ±ØÐëÊÇÒÔдÈëģʽ´ò¿ªµÄÎļþ¡£Èç¹ûÔÀ´µÄÎļþ´óС±È²ÎÊýlength´ó£¬Ôò³¬¹ýµÄ²¿·Ö»á±»É¾È¥¡£hw5LinuxÁªÃË
|
·µ»ØÖµ | Ö´Ðгɹ¦Ôò·µ»Ø0£¬Ê§°Ü·µ»Ø-1£¬´íÎóÔÒò´æÓÚerrno¡£hw5LinuxÁªÃË
|
´íÎó´úÂë | EBADF ²ÎÊýfdÎļþÃèÊö´ÊΪÎÞЧµÄ»ò¸ÃÎļþÒѹرա£hw5LinuxÁªÃË EINVAL ²ÎÊýfd Ϊһsocket ²¢·ÇÎļþ£¬»òÊǸÃÎļþ²¢·ÇÒÔдÈëģʽ´ò¿ª¡£hw5LinuxÁªÃË
|
| ¡¡ |
hw5LinuxÁªÃË
| hw5LinuxÁªÃË getcwd£¨È¡µÃµ±Ç°µÄ¹¤×÷Ŀ¼£© |
Ïà¹Øº¯Êý | get_current_dir_name£¬getwd£¬chdirhw5LinuxÁªÃË
|
±íÍ·Îļþ | #include<unistd.h>hw5LinuxÁªÃË
|
¶¨Ò庯Êý | char * getcwd(char * buf,size_t size);hw5LinuxÁªÃË
|
º¯Êý˵Ã÷ | getcwd()»á½«µ±Ç°µÄ¹¤×÷Ŀ¼¾ø¶Ô·¾¶¸´ÖƵ½²ÎÊýbufËùÖ¸µÄÄÚ´æ¿Õ¼ä£¬²ÎÊýsizeΪbufµÄ¿Õ¼ä´óС¡£ÔÚµ÷Óô˺¯Êýʱ£¬bufËùÖ¸µÄÄÚ´æ¿Õ¼äÒª×ã¹»´ó£¬Èô¹¤×÷Ŀ¼¾ø¶Ô·¾¶µÄ×Ö·û´®³¤¶È³¬¹ý²ÎÊýsize´óС£¬Ôò»ØÖµNULL£¬errnoµÄÖµÔòΪERANGE¡£ÌÈÈô²ÎÊýbufΪNULL£¬getcwd()»áÒÀ²ÎÊýsizeµÄ´óС×Ô¶¯ÅäÖÃÄÚ´æ(ʹÓÃmalloc())£¬Èç¹û²ÎÊýsizeҲΪ0£¬Ôògetcwd()»áÒÀ¹¤×÷Ŀ¼¾ø¶Ô·¾¶µÄ×Ö·û´®³Ì¶ÈÀ´¾ö¶¨ËùÅäÖõÄÄÚ´æ´óС£¬½ø³Ì¿ÉÒÔÔÚʹÓÃÍê´Ë×Ö·û´®ºóÀûÓÃfree()À´ÊͷŴ˿ռ䡣hw5LinuxÁªÃË
|
·µ»ØÖµ | Ö´Ðгɹ¦Ôò½«½á¹û¸´ÖƵ½²ÎÊýbufËùÖ¸µÄÄÚ´æ¿Õ¼ä£¬»òÊÇ·µ»Ø×Ô¶¯ÅäÖõÄ×Ö·û´®Ö¸Õ롣ʧ°Ü·µ»ØNULL£¬´íÎó´úÂë´æÓÚerrno¡£hw5LinuxÁªÃË
|
·¶Àý | #include<unistd.h>hw5LinuxÁªÃË main()hw5LinuxÁªÃË {hw5LinuxÁªÃË char buf[80];hw5LinuxÁªÃË getcwd(buf,sizeof(buf));hw5LinuxÁªÃË printf(¡°current working directory : %sn¡±,buf);hw5LinuxÁªÃË }hw5LinuxÁªÃË
|
Ö´ÐÐ | current working directory :/tmphw5LinuxÁªÃË
|
| ¡¡ |
hw5LinuxÁªÃË
| hw5LinuxÁªÃË link£¨½¨Á¢ÎļþÁ¬½Ó£© |
Ïà¹Øº¯Êý | symlink£¬unlinkhw5LinuxÁªÃË
|
±íÍ·Îļþ | #include<unistd.h>hw5LinuxÁªÃË
|
¶¨Ò庯Êý | int link (const char * oldpath,const char * newpath);hw5LinuxÁªÃË
|
º¯Êý˵Ã÷ | link()ÒÔ²ÎÊýnewpathÖ¸¶¨µÄÃû³ÆÀ´½¨Á¢Ò»¸öеÄÁ¬½Ó(Ó²Á¬½Ó)µ½²ÎÊýoldpathËùÖ¸¶¨µÄÒÑ´æÔÚÎļþ¡£Èç¹û²ÎÊýnewpathÖ¸¶¨µÄÃû³ÆÎªÒ»ÒÑ´æÔÚµÄÎļþÔò²»»á½¨Á¢Á¬½Ó¡
LinuxÁªÃËÊÕ¼¯ÕûÀí ,תÌùÇë±êÃ÷ÔʼÁ´½Ó,ÈçÓÐÈκÎÒÉÎÊ»¶ÓÀ´±¾Õ¾LinuxÂÛ̳ÌÖÂÛ |
|
|
|
|