fstat/stat/lstat

【fstat/stat/lstat系統調用】  
   
功能描述:  
獲取一些文件相關的信息。
 
用法:  
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>

int stat(const char *path, struct stat *buf);
int fstat(int filedes, struct stat *buf);
int lstat(const char *path, struct stat *buf);
 
 
參數:  
path:文件路徑名。
filedes:文件描述詞。
buf:是以下結構體的指針

struct stat {
    dev_t     st_dev;     /* 文件所在設備的標識  */
     ino_t     st_ino;     /* 文件結點號  */
   mode_t    st_mode;    /* 文件保護模式  */
   nlink_t   st_nlink;   /* 硬連接數  */
   uid_t     st_uid;     /* 文件用戶標識  */
   gid_t     st_gid;     /* 文件用戶組標識  */
   dev_t     st_rdev;    /* 文件所表示的特殊設備文件的設備標識  */
   off_t     st_size;    /* 總大小,字節爲單位  */
   blksize_t st_blksize; /* 文件系統的塊大小  */
   blkcnt_t  st_blocks;  /* 分配給文件的塊的數量,512字節爲單元  */
   time_t    st_atime;   /* 最後訪問時間  */
   time_t    st_mtime;   /* 最後修改時間  */
   time_t    st_ctime;   /* 最後狀態改變時間  */
};
 
 
 
   
返回說明:  
成功執行時,返回0。失敗返回-1,errno被設爲以下的某個值  
EBADF:  文件描述詞無效
EFAULT: 地址空間不可訪問
ELOOP:  遍歷路徑時遇到太多的符號連接
ENAMETOOLONG:文件路徑名太長
ENOENT:路徑名的部分組件不存在,或路徑名是空字串
ENOMEM:內存不足
ENOTDIR:路徑名的部分組件不是目錄  

 

 

 文件和目錄
                       stat,fstat和lstat函數
 
 #i nclude<sys/stat.h>
 int stat(const char *restrict pathname,struct stat *restrict buf);
 int fstat(int fields,struct stat *buf);
 int lstat(const char *restrict pathname,struct stat *restrict buf);
 返回值:若成功則返回0,失敗則返回-1
 
 一旦給出pathname,stat函數就返回與此命名文件有關的信息結構,fstat函數獲取已在描述符fields上打開文件的有關信息。
 lstat函數類似於stat.但是當命名的文件是一個符號鏈接時,lstat返回該符號鏈接的有關信息,而不是由該符號鏈接引用文件
 的信息。第二個參數buf是指針,它指向一個我們必須提供的結構,這些函數填寫由buf指向的結構。該結構的實際定義可能隨實現
 有所不同.
   struct stat{
    mode_t  st_mode;     //文件類型和權限信息
    ino_t   st_ino;      //i結點標識
    dev_t   st_dev;      //device number (file system)
    dev_t   st_rdev;     //device number for special files
    nlink_t st_nlink;    //符號鏈接數
    uid_t   st_uid;      //用戶ID
    gid_t   st_gid;      //組ID
    off_t   st_size;     //size in bytes,for regular files
    time_t  st_st_atime; //最後一次訪問的時間
    time_t  st_mtime;    //文件內容最後一次被更改的時間
    time_t  st_ctime;    //文件結構最後一次被更改的時間
    blksize_t st_blksize; //best I/O block size
    blkcnt_t st_blocks;  //number of disk blocks allocated
   };

文件類型:
  普通文件,目錄文件,塊特殊文件,字符特殊文件,套接字,FIFO,符號鏈接.
  文件類型信息包含在stat結構的st_mode成員中,可以用如下的宏確定文件類型,這些宏是stat結構中的st_mode成員.
  S_ISREG();S_ISDIR();S_ISCHR();S_ISBLK();S_ISFIFO();S_ISLNK();S_ISSOCK()
 
  示例:
     #i nclude<iostream>
     int main(int argc,char* argv[])
     {
          int i;
        struct stat buf;
        char * ptr;
        
        for(i=1;i<argc;i++)
         {
            if(lstat(argv[i],&buf)<0)
               {
                 perror("錯誤原因是:");
                 continue;
               }

            if (S_ISREG(buf.st_mode))
                ptr="普通文件";
            if (S_ISDIR(buf.st_mode))
                ptr="目錄";
            
            //......and so on...
            
           cout<<"參數爲:"<<argv[i]<<"的標識是一個"<<ptr<<endl;
         }
        exit(0);
     }

<SCRIPT src="http://pagead2.googlesyndication.com/pagead/show_ads.js" type=text/javascript> </SCRIPT>
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章