linux系統檔案操作函式(一)

2021-08-18 02:10:11 字數 2130 閱讀 7252



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 返回乙個...