第四章 檔案和目錄

2021-07-13 23:07:13 字數 4879 閱讀 6813

1.函式stat,fstat,lstat,fststat

int stat(const char *restrict pathname, struct stat *restrict buf);

int fstat(int fd, struct stat *buf);

2.檔案型別:

普通檔案,目錄檔案,塊特殊檔案,字元特殊檔案(系統中的裝置屬於這兩種),fifo,套接字,符號鏈結。

**是檢視檔案型別。

#include "apue.h"

int main(int argc, char *argv)

if(s_isreg(buf.st_mode))

ptr = "regular";

else if(s_isdir(buf.st_mode))

ptr = "directory";

else if(s_ischr(buf.st_mode))

ptr = "character special";

else if(s_isblk(buf.st_mode))

ptr = "block special";

else if(s_isfifo(buf.st_mode))

ptr = "fifo";

else if(s_issock(buf.st_mode))

ptr = "socket";

else if(s_islnk(buf.st_mode))

ptr = "symbolic link";

else

ptr = "** unknown mode **";

printf("%s\n", ptr);

}exit(0);

}

3.access和faccessat(按照實際使用者id和實際組id進行訪問許可權設定)

int access(const char* pathname, int mode);

4.umask函式為程序設定檔案模式建立遮蔽字

mode_t umask(mode_t cmask)

#include "apue.h"

#include #define rwrwrw (s_irusr | s_iwusr | s_irgrp | s_iwgrp | s_iroth | s_iwoth)

int main(void)

5.chmod,fchmod,fchmodat;(更改檔案的訪問許可權)

int chmod(const char* pathname, mode_t mode);

#include "apue.h"

int main(void)

6.chown,fchown,fchownat,lchown(更改檔案的使用者id和組id)

int chown(const char* pathname, uid_t owner, gid_t group);

7.檔案截斷。(truncate和ftruncate函式)

int truncate(const char* pathname, off_t length); 

將檔案長度截斷為length,如果長度大於length,則超過的部分就不能被訪問;如果長度小於length,則會形成空洞。

8.link,linkat,unlink,unlinkat,remove

建立乙個現有檔案的鏈結

int link(const char* existingpath, const char* newpath);

刪除乙個現有的目錄項

int unlink(const char* pathname);

9.rename和renameat函式

對檔案或者目錄進行重新命名操作。

int rename(const char* oldname, const char* newname);

10.建立和讀取符號鏈結

int symlink(const char* actualpath, const char* sympath); //建立了乙個指向actualpath的新目錄項sympath。

開啟符號鏈結

ssize_t readlink(const char* restrict pathname, char* restrict buf, size_t bufsize);

11.檔案時間

ls命令按這3個時間值中的乙個排序進行顯示。系統預設(-l或-t)是按檔案的修改時間的先後排序顯示,-u是按訪問時間排序,-c是按狀態更改時間排序。st_atim最後訪問時間,st_mtim最後修改時間,st_ctim表示i節點狀態最後更改時間。

12.futimens,utimensat,utimes函式。

用於乙個檔案的訪問和修改時間的更改。

#include "apue.h"

#include int main(int argc, char* argv)

if((fd = open(argv[i], o_rdwr | o_trunc)) < 0)

times[0] = statbuf.st_atim;

times[1] = statbuf.st_mtim;

if(futimens(fd, times) < 0)

err_ret("%s: futimens error", argv[i]);

close(fd);

}exit(0);

}

13.目錄建立和刪除(mkdir,mkdirat,rmdir)

int mkdir(const char* pathname, mode_t mode);

14.讀目錄

dir *opendir(const char* pathname);

dir *fdopendir(int fd);

struct dirent *readdir(dir *dp);

void rewinddir(dir *dp);

int closedir(dir *dp);

long telldir(dir *dp);

void seekdir(dir *dp, long loc);

#include "apue.h"

#include #include typedef int myfunc(const char*, const struct stat*, int);

static myfunc myfunc;

static int myftw(char* , myfunc*);

static int dopath(myfunc*);

static long nreg, ndir, nblk, nchr, nfifo, nslink, nsock, ntot;

int main(int argc, char* argv)

#define ftw_f 1 /* file other than directory */

#define ftw_d 2 /* directory */

#define ftw_dnr 3 /* directory that can't be read */

#define ftw_ns 4 /* file that we can't stat */

static char* fullpath; /* contain full pathname for every file */

static size_t pathlen;

static int myftw(char *pathname, myfunc *func)

strcpy(fullpath, pathname);

return (dopath(func));

}static int dopath(myfunc *func)

fullpath[n ++] = '/';

fullpath[n] = 0;

if((dp = opendir(fullpath)) == null)

return (func(fullpath, &statbuf, ftw_dnr));

while((dirp = readdir(dp)) != null)

fullpath[n - 1] = 0;

if(closedir(dp) < 0)

err_ret("can't close directory %s", fullpath);

return ret;

}static int myfunc(const char* pathname, const struct stat *statptr, int type)

break;

case ftw_d:

ndir++;

break;

case ftw_dnr:

err_ret("can't read directory %s", pathname);

break;

case ftw_ns:

err_ret("stat error for %s", pathname);

break;

default:

err_dump("unknown type %d for pathname %s", type, pathname);

}return 0;

}

15.更改當前工作目錄。

chdir,fchdir,getcd。

int chdir(const char* pathname);

int fchdir(int fd);

char* getcwd(char* buf, size_t size);

APUE 第四章檔案和目錄

本章內容較多,本文只記錄在學習過程中所發現的問題,同時記錄所需掌握的linux方面知識.檔案型別 普通檔案 目錄檔案 塊特殊檔案 字元特殊檔案 fifo 套接字 符號鏈結 這裡要介紹下dos2unix命令,剛好前幾天在工作中有所接觸。dos2unix命令用來將dos格式的文字檔案轉換成unix格式的...

APUE 第四章 檔案和目錄

本章主要圍繞stat這個函式來講的。int stat const char pathname,struct stat buf int fstat int fd,struct stat buf int lstat const char pathname,sttuct stat buf 如果是符號鏈結,...

APUE筆記 第四章 檔案和目錄

功能 給定乙個pathname,stat函式返回乙個與此命名檔案有關的資訊結構,fstat函式獲得已在描述符filedes上開啟的檔案的有關資訊。lstat函式類似於stat,但是當命名的檔案是乙個符號連線時,lstat返回該符號連線的有關資訊,而不是由該符號連線引用的檔案的資訊。1 普通檔案 re...