|
h>hw5LinuxÁªÃË
|
¶¨Ò庯Êý | int stat(const char * file_name,struct stat *buf);hw5LinuxÁªÃË
|
º¯Êý˵Ã÷ | stat()ÓÃÀ´½«²ÎÊýfile_nameËùÖ¸µÄÎļþ״̬£¬¸´ÖƵ½²ÎÊýbufËùÖ¸µÄ½á¹¹ÖС£hw5LinuxÁªÃË ÏÂÃæÊÇstruct statÄÚ¸÷²ÎÊýµÄ˵Ã÷hw5LinuxÁªÃË struct stathw5LinuxÁªÃË {hw5LinuxÁªÃË dev_t st_dev; /*device*/hw5LinuxÁªÃË ino_t st_ino; /*inode*/hw5LinuxÁªÃË mode_t st_mode; /*protection*/hw5LinuxÁªÃË nlink_t st_nlink; /*number of hard links */hw5LinuxÁªÃË uid_t st_uid; /*user ID of owner*/hw5LinuxÁªÃË gid_t st_gid; /*group ID of owner*/hw5LinuxÁªÃË dev_t st_rdev; /*device type */hw5LinuxÁªÃË off_t st_size; /*total size, in bytes*/hw5LinuxÁªÃË unsigned long st_blksize; /*blocksize for filesystem I/O */hw5LinuxÁªÃË unsigned long st_blocks; /*number of blocks allocated*/hw5LinuxÁªÃË time_t st_atime; /* time of lastaccess*/hw5LinuxÁªÃË time_t st_mtime; /* time of last modification */hw5LinuxÁªÃË time_t st_ctime; /* time of last change */hw5LinuxÁªÃË };hw5LinuxÁªÃË st_dev ÎļþµÄÉ豸±àºÅhw5LinuxÁªÃË st_ino ÎļþµÄi-nodehw5LinuxÁªÃË st_mode ÎļþµÄÀàÐͺʹæÈ¡µÄȨÏÞhw5LinuxÁªÃË st_nlink Á¬µ½¸ÃÎļþµÄÓ²Á¬½ÓÊýÄ¿£¬¸Õ½¨Á¢µÄÎļþֵΪ1¡£hw5LinuxÁªÃË st_uid ÎļþËùÓÐÕßµÄÓû§Ê¶±ðÂëhw5LinuxÁªÃË st_gid ÎļþËùÓÐÕßµÄ×éʶ±ðÂëhw5LinuxÁªÃË st_rdev Èô´ËÎļþΪװÖÃÉ豸Îļþ£¬ÔòΪÆäÉ豸±àºÅhw5LinuxÁªÃË st_size Îļþ´óС£¬ÒÔ×Ö½Ú¼ÆËãhw5LinuxÁªÃË st_blksize ÎļþϵͳµÄI/O »º³åÇø´óС¡£hw5LinuxÁªÃË st_blcoks Õ¼ÓÃÎļþÇø¿éµÄ¸öÊý£¬Ã¿Ò»Çø¿é´óСΪ512 ¸ö×Ö½Ú¡£hw5LinuxÁªÃË st_atime Îļþ×î½üÒ»´Î±»´æÈ¡»ò±»Ö´ÐеÄʱ¼ä£¬Ò»°ãÖ»ÓÐÔÚÓÃmknod¡¢utime¡¢read¡¢writeÓëtructateʱ¸Ä±ä¡£hw5LinuxÁªÃË st_mtime Îļþ×îºóÒ»´Î±»Ð޸ĵÄʱ¼ä£¬Ò»°ãÖ»ÓÐÔÚÓÃmknod¡¢utimeºÍwriteʱ²Å»á¸Ä±ähw5LinuxÁªÃË st_ctime i-node×î½üÒ»´Î±»¸ü¸ÄµÄʱ¼ä£¬´Ë²ÎÊý»áÔÚÎļþËùÓÐÕß¡¢×顢ȨÏÞ±»¸ü¸Äʱ¸üÐÂÏÈǰËùÃèÊöµÄst_mode Ôò¶¨ÒåÁËÏÂÁÐÊýÖÖÇé¿öhw5LinuxÁªÃË S_IFMT 0170000 ÎļþÀàÐ͵ÄλÕÚÕÖhw5LinuxÁªÃË S_IFSOCK 0140000 scokethw5LinuxÁªÃË S_IFLNK 0120000 ·ûºÅÁ¬½Óhw5LinuxÁªÃË S_IFREG 0100000 Ò»°ãÎļþhw5LinuxÁªÃË S_IFBLK 0060000 Çø¿é×°ÖÃhw5LinuxÁªÃË S_IFDIR 0040000 Ŀ¼hw5LinuxÁªÃË S_IFCHR 0020000 ×Ö·û×°ÖÃhw5LinuxÁªÃË S_IFIFO 0010000 ÏȽøÏȳöhw5LinuxÁªÃË S_ISUID 04000 ÎļþµÄ£¨set user-id on execution£©Î»hw5LinuxÁªÃË S_ISGID 02000 ÎļþµÄ£¨set group-id on execution£©Î»hw5LinuxÁªÃË S_ISVTX 01000 ÎļþµÄstickyλhw5LinuxÁªÃË S_IRUSR£¨S_IREAD£© 00400 ÎļþËùÓÐÕ߾߿ɶÁȡȨÏÞhw5LinuxÁªÃË S_IWUSR£¨S_IWRITE£©00200 ÎļþËùÓÐÕ߾߿ÉдÈëȨÏÞhw5LinuxÁªÃË S_IXUSR£¨S_IEXEC£© 00100 ÎļþËùÓÐÕ߾߿ÉÖ´ÐÐȨÏÞhw5LinuxÁªÃË S_IRGRP 00040 Óû§×é¾ß¿É¶ÁȡȨÏÞhw5LinuxÁªÃË S_IWGRP 00020 Óû§×é¾ß¿ÉдÈëȨÏÞhw5LinuxÁªÃË S_IXGRP 00010 Óû§×é¾ß¿ÉÖ´ÐÐȨÏÞhw5LinuxÁªÃË S_IROTH 00004 ÆäËûÓû§¾ß¿É¶ÁȡȨÏÞhw5LinuxÁªÃË S_IWOTH 00002 ÆäËûÓû§¾ß¿ÉдÈëȨÏÞhw5LinuxÁªÃË S_IXOTH 00001 ÆäËûÓû§¾ß¿ÉÖ´ÐÐȨÏÞhw5LinuxÁªÃË ÉÏÊöµÄÎļþÀàÐÍÔÚPOSIX Öж¨ÒåÁ˼ì²éÕâЩÀàÐ͵ĺ궨Òåhw5LinuxÁªÃË S_ISLNK £¨st_mode£© ÅжÏÊÇ·ñΪ·ûºÅÁ¬½Óhw5LinuxÁªÃË S_ISREG £¨st_mode£© ÊÇ·ñΪһ°ãÎļþhw5LinuxÁªÃË S_ISDIR £¨st_mode£©ÊÇ·ñΪĿ¼hw5LinuxÁªÃË S_ISCHR £¨st_mode£©ÊÇ·ñΪ×Ö·û×°ÖÃÎļþhw5LinuxÁªÃË S_ISBLK £¨s3e£© ÊÇ·ñΪÏȽøÏȳöhw5LinuxÁªÃË S_ISSOCK £¨st_mode£© ÊÇ·ñΪsockethw5LinuxÁªÃË ÈôһĿ¼¾ßÓÐsticky 루S_ISVTX£©£¬Ôò±íʾÔÚ´ËĿ¼ÏµÄÎļþÖ»Äܱ»¸ÃÎļþËùÓÐÕß¡¢´ËĿ¼ËùÓÐÕß»òrootÀ´É¾³ý»ò¸ÄÃû¡£hw5LinuxÁªÃË
|
·µ»ØÖµ | Ö´Ðгɹ¦Ôò·µ»Ø0£¬Ê§°Ü·µ»Ø-1£¬´íÎó´úÂë´æÓÚerrnohw5LinuxÁªÃË
|
´íÎó´úÂë | ENOENT ²ÎÊýfile_nameÖ¸¶¨µÄÎļþ²»´æÔÚhw5LinuxÁªÃË ENOTDIR ·¾¶ÖеÄĿ¼´æÔÚµ«È´·ÇÕæÕýµÄĿ¼hw5LinuxÁªÃË ELOOP Óû´ò¿ªµÄÎļþÓйý¶à·ûºÅÁ¬½ÓÎÊÌ⣬ÉÏÏÞΪ16·ûºÅÁ¬½Óhw5LinuxÁªÃË EFAULT ²ÎÊýbufΪÎÞЧָÕ룬ָÏòÎÞ·¨´æÔÚµÄÄÚ´æ¿Õ¼ähw5LinuxÁªÃË EACCESS ´æÈ¡Îļþʱ±»¾Ü¾øhw5LinuxÁªÃË ENOMEM ºËÐÄÄÚ´æ²»×ãhw5LinuxÁªÃË ENAMETOOLONG ²ÎÊýfile_nameµÄ·¾¶Ãû³ÆÌ«³¤hw5LinuxÁªÃË
|
·¶Àý | #include<sys/stat.h>hw5LinuxÁªÃË #include<unistd.h>hw5LinuxÁªÃË mian()hw5LinuxÁªÃË {hw5LinuxÁªÃË struct stat buf;hw5LinuxÁªÃË stat (¡°/etc/passwd¡±,&buf);hw5LinuxÁªÃË printf(¡°/etc/passwd file size = %d n¡±,buf.st_size);hw5LinuxÁªÃË }hw5LinuxÁªÃË
|
Ö´ÐÐ | /etc/passwd file size = 705hw5LinuxÁªÃË
|
| ¡¡ |
hw5LinuxÁªÃË
| hw5LinuxÁªÃË symlink£¨½¨Á¢Îļþ·ûºÅÁ¬½Ó£© |
Ïà¹Øº¯Êý | link£¬unlinkhw5LinuxÁªÃË
|
±íÍ·Îļþ | #include<unistd.h>hw5LinuxÁªÃË
|
¶¨Ò庯Êý | int symlink( const char * oldpath,const char * newpath);hw5LinuxÁªÃË
|
º¯Êý˵Ã÷ | symlink()ÒÔ²ÎÊýnewpathÖ¸¶¨µÄÃû³ÆÀ´½¨Á¢Ò»¸öеÄÁ¬½Ó(·ûºÅÁ¬½Ó)µ½²ÎÊýoldpathËùÖ¸¶¨µÄÒÑ´æÔÚÎļþ¡£²ÎÊýoldpathÖ¸¶¨µÄÎļþ²»Ò»¶¨Òª´æÔÚ£¬Èç¹û²ÎÊýnewpathÖ¸¶¨µÄÃû³ÆÎªÒ»ÒÑ´æÔÚµÄÎļþÔò²»»á½¨Á¢Á¬½Ó¡£hw5LinuxÁªÃË
|
·µ»ØÖµ | ³É¹¦Ôò·µ»Ø0£¬Ê§°Ü·µ»Ø-1£¬´íÎóÔÒò´æÓÚerrno¡£hw5LinuxÁªÃË
|
´íÎó´úÂë | EPERM ²ÎÊýoldpathÓënewpathËùÖ¸µÄÎļþϵͳ²»Ö§³Ö·ûºÅÁ¬½Óhw5LinuxÁªÃË EROFS Óû²âÊÔдÈëȨÏÞµÄÎļþ´æÔÚÓÚÖ»¶ÁÎļþϵͳÄÚhw5LinuxÁªÃË EFAULT ²ÎÊýoldpath»ònewpathÖ¸Õ볬³ö¿É´æÈ¡ÄÚ´æ¿Õ¼ä¡£hw5LinuxÁªÃË ENAMETOOLONG ²ÎÊýoldpath»ònewpathÌ«³¤hw5LinuxÁªÃË ENOMEM ºËÐÄÄÚ´æ²»×ãhw5LinuxÁªÃË EEXIST ²ÎÊýnewpathËùÖ¸µÄÎļþÃûÒÑ´æÔÚ¡£hw5LinuxÁªÃË EMLINK ²ÎÊýoldpathËùÖ¸µÄÎļþÒÑ´ïµ½×î´óÁ¬½ÓÊýÄ¿hw5LinuxÁªÃË ELOOP ²ÎÊýpathnameÓйý¶à·ûºÅÁ¬½ÓÎÊÌâhw5LinuxÁªÃË ENOSPC ÎļþϵͳµÄÊ£Óà¿Õ¼ä²»×ãhw5LinuxÁªÃË EIO I/O ´æÈ¡´íÎóhw5LinuxÁªÃË
|
·¶Àý | #include<unistd.h>hw5LinuxÁªÃË main()hw5LinuxÁªÃË {hw5LinuxÁªÃË symlink(¡°/etc/passwd¡±,¡±pass¡±);hw5LinuxÁªÃË }hw5LinuxÁªÃË
|
| ¡¡ |
hw5LinuxÁªÃË
| hw5LinuxÁªÃË telldir£¨È¡µÃĿ¼Á÷µÄ¶ÁȡλÖã© |
Ïà¹Øº¯Êý | open£¬opendir£¬closedir£¬rewinddir£¬seekdir£¬readdir£¬scandirhw5LinuxÁªÃË
|
±íÍ·Îļþ | #include<dirent.h>hw5LinuxÁªÃË
|
¶¨Ò庯Êý | off_t telldir(DIR *dir);hw5LinuxÁªÃË
|
º¯Êý˵Ã÷ | telldir()·µ»Ø²ÎÊýdirĿ¼Á÷ĿǰµÄ¶ÁȡλÖᣴ˷µ»ØÖµ´ú±í¾àÀëĿ¼Îļþ¿ªÍ·µÄÆ«ÒÆÁ¿·µ»ØÖµ·µ»ØÏ¸ö¶ÁȡλÖã¬ÓдíÎó·¢Éúʱ·µ»Ø-1¡£hw5LinuxÁªÃË
|
´íÎó´úÂë | EBADF²ÎÊýdirΪÎÞЧµÄĿ¼Á÷¡£hw5LinuxÁªÃË
|
·¶Àý | #include<sys/types.h>hw5LinuxÁªÃË #include<dirent.h>hw5LinuxÁªÃË #include<unistd.h>hw5LinuxÁªÃË main()hw5LinuxÁªÃË {hw5LinuxÁªÃË DIR *dir;hw5LinuxÁªÃË struct dirent *ptr;hw5LinuxÁªÃË int offset;hw5LinuxÁªÃË dir = opendir(¡°/etc/rc.d¡±);hw5LinuxÁªÃË while((ptr = readdir(dir))!=NULL)hw5LinuxÁªÃË {hw5LinuxÁªÃË offset = telldir (dir);hw5LinuxÁªÃË printf(¡°d_name : %s offset :%dn¡±, ptr->d_name,offset);hw5LinuxÁªÃË }hw5LinuxÁªÃË closedir(dir);hw5LinuxÁªÃË }hw5LinuxÁªÃË
|
Ö´ÐÐ | d_name : . offset :12hw5LinuxÁªÃË d_name : .. offset:24hw5LinuxÁªÃË d_name : init.d offset 40hw5LinuxÁªÃË d_name : rc0.d offset :56hw5LinuxÁªÃË d_name :rc1.d offset :72hw5LinuxÁªÃË d_name:rc2.d offset :88hw5LinuxÁªÃË d_name:rc3.d offset 104hw5LinuxÁªÃË d_name:rc4.d offset:120hw5LinuxÁªÃË d_name:rc5.d offset:136hw5LinuxÁªÃË d_name:rc6.d offset:152hw5LinuxÁªÃË d_name:rc offset 164hw5LinuxÁªÃË d_name:rc.local offset :180hw5LinuxÁªÃË d_name:rc.sysinit offset :4096hw5LinuxÁªÃË
|
| ¡¡ |
hw5LinuxÁªÃË
| hw5LinuxÁªÃË truncate£¨¸Ä±äÎļþ´óС£© |
Ïà¹Øº¯Êý | open£¬ftruncatehw5LinuxÁªÃË
|
±íÍ·Îļþ | #include<unistd.h>hw5LinuxÁªÃË
|
¶¨Ò庯Êý | int truncate(const char * path,off_t length);hw5LinuxÁªÃË
|
º¯Êý˵Ã÷ | truncate()»á½«²ÎÊýpath Ö¸¶¨µÄÎļþ´óС¸ÄΪ²ÎÊýlength Ö¸¶¨µÄ´óС¡
LinuxÁªÃËÊÕ¼¯ÕûÀí ,תÌùÇë±êÃ÷ÔʼÁ´½Ó,ÈçÓÐÈκÎÒÉÎÊ»¶ÓÀ´±¾Õ¾LinuxÂÛ̳ÌÖÂÛ |
|
|
|
|