工作中涉及到檔案系統,有時需要判斷檔案和目錄是否存在。我結合APUE第四章文件和目錄,總結如何正確判斷文件和目錄是否存在,方便以後查詢。 (建議學習:linux操作維)
stat系列函數
stat函數用來傳回與檔案相關的結構資訊。 stat系列函數有三種情況,分別對應檔案名稱、檔案描述符和符號連結檔案。 stat結構描述了檔案的屬性,主要包括檔案的類型、檔案大小等等。 詳細stat結構如下所示:
struct stat { mode_t st_mode; // file type & mode(permissions) ino_t st_ino; // i-node number(serial number) dev_t st_dev; // device number(filesystem) dev_t st_rdev; // device number for specials files nlink_t st_nlink; // number of links uid_t st_uid; // user ID of owner gid_t st_gid; // group ID of owner off_t st_size; // size in bytes, for regular files time_t st_atime; // time of last access time_t st_mtime; // time of last modification time_t st_ctime; // time of last file status change long st_blksize; // best I/O block size long st_blocks; // number of 512-byte blocks allocated };
我們可以透過stat取得檔案的類型和檔案大小等資訊。檔案類型有:普通檔案、目錄檔案、區塊特殊檔案、字元特殊檔案、FIFO、套接字和符號連結。 要想透過stat系列函數來判斷檔案或目錄是否存在,當執行stat函數,如果檔案存在時,還需進一步判斷該檔案是普通檔案還是目錄檔案。
stat系列函數錯誤回傳-1,錯誤碼存在errno中,errno取值如下:
1、ENOENT 参数file_name 指定的文件不存在 2、ENOTDIR 路径中的目录存在但却非真正的目录 3、ELOOP 欲打开的文件有过多符号连接问题, 上限为16 符号连接 4、EFAULT 参数buf 为无效指针, 指向无法存在的内存空间 5、EACCESS 存取文件时被拒绝 6、ENOMEM 核心内存不足 7、ENAMETOOLONG 参数file_name 的路径名称太长
以上是linux如何判斷目錄是否存在的詳細內容。更多資訊請關注PHP中文網其他相關文章!