1 stat函式
標頭檔案: #include
#include
函式原型: int stat(const char *file_name, struct stat *buf);
函式說明: 通過檔名filename獲取檔案資訊,並儲存在buf所指的結構體stat中
返回值: 執行成功則返回0,失敗返回-1,錯誤**存於errno
錯誤**:
enoent 引數file_name指定的檔案不存在
enotdir 路徑中的目錄存在但卻非真正的目錄
eloop 欲開啟的檔案有過多符號連線問題,上限為16符號連線
efault 引數buf為無效指標,指向無法存在的記憶體空間
eaccess 訪問檔案時被拒絕
enomem 核心記憶體不足
enametoolong 引數file_name的路徑名稱太長
獲取檔案屬性(從inode上獲取)
返回值成功:0
失敗:-1
檔案屬性
struct stat ;
特性能夠穿透(跟蹤)符號鏈結
用stat實現 簡單的ls -l命令:ls-l.c
#include
#include
#include
#include
#include
#include
#include
#include
int main(int argc, char* argv)
struct stat st;
int ret = stat(argv[1], &st);
if(ret == -1)
// 儲存檔案型別和訪問許可權
char perms[11] = ;
// 判斷檔案型別
switch(st.st_mode & s_ifmt)
// 判斷檔案的訪問許可權
// 檔案所有者
perms[1] = (st.st_mode & s_irusr) ? 'r' : '-';
perms[2] = (st.st_mode & s_iwusr) ? 'w' : '-';
perms[3] = (st.st_mode & s_ixusr) ? 'x' : '-';
// 檔案所屬組
perms[4] = (st.st_mode & s_irgrp) ? 'r' : '-';
perms[5] = (st.st_mode & s_iwgrp) ? 'w' : '-';
perms[6] = (st.st_mode & s_ixgrp) ? 'x' : '-';
// 其他人
perms[7] = (st.st_mode & s_iroth) ? 'r' : '-';
perms[8] = (st.st_mode & s_iwoth) ? 'w' : '-';
perms[9] = (st.st_mode & s_ixoth) ? 'x' : '-';
// 硬鏈結計數
int linknum = st.st_nlink;
// 檔案所有者
char* fileuser = getpwuid(st.st_uid)->pw_name;
// 檔案所屬組
char* filegrp = getgrgid(st.st_gid)->gr_name;
// 檔案大小
int filesize = (int)st.st_size;
// 修改時間
char* time = ctime(&st.st_mtime);
char mtime[512] = ;
strncpy(mtime, time, strlen(time)-1);
char buf[1024];
sprintf(buf, "%s %d %s %s %d %s %s", perms, linknum, fileuser, filegrp, filesize, mtime, argv[1]);
printf("%s\n", buf);
return 0;
}
linux系統檔案操作函式(三)
1 access 函式 作用 測試指定檔案是否擁有某種許可權 標頭檔案 unistd.h 原型 int access const char pathname,int mode 引數 pathname 檔名 mode 許可權類別 r ok 是否有讀許可權 w ok 是否有寫許可權 x ok 是否有執行...
Linux 檔案操作函式
底層檔案操作函式 includeint open const char pathname,int flags int open const char pathname,int flags,mode t mode 返回值 成功,返回檔案描述符 失敗,返回 1,失敗原因記錄在errno中 int clo...
Linux檔案操作函式
寫專案的時候,當我把實現linux的基本功能的 寫完之後,寫斷點續傳時,有點難度 我對lseek學的不好 send這個函式是不能傳整形值的只能傳字元型別 1 open int open const char filename,int flag,int mode 返回值 1 1 出錯 2 0 返回乙個...