Linux系統程式設計 NO6 檔案屬性與鏈結檔案

2021-09-25 18:34:49 字數 3698 閱讀 2862

**1. int stat(const char file_name,struct stat buf);

函式用於獲取指定檔案的屬性並且放入buf中,返回值為-1表示函式執行錯誤,第乙個引數是字串,也就是檔名,第二個引數必須要是乙個struct stat型別的值,然後取其位址就可以了,如:

struct stat buf;

stat(「/etc/passwd」,&buf);得到的buf就是該檔案的屬性,使用buf.st_mode即可得到該檔案的mode值。

標頭檔案是

2. int fstat(int filedes,struct stat * buf);

函式第乙個引數是檔案描述符,該函式和stat函式唯一的區別就是第乙個引數必須要是檔案描述符,所以使用這個函式之前要先開啟(open)檔案。

標頭檔案是

*3.int lstat(const char file_name,sturct stat * buf);

該函式和stat函式唯一的區別就是該函式的物件是乙個符號鏈結檔案,返回結果也是這個鏈結檔案本身的屬性,如果用stat函式作用於乙個鏈結檔案,那麼得到的結果是鏈結檔案原始檔的屬性。

標頭檔案是

1. struct passwd * getpwuid(uid_t uid);

該函式作用是根據檔案的uid查詢檔案的其他使用者屬性,比如檔案所有者之類的資訊,引數是檔案的uid,需要先得到(stat())檔案uid,再使用,需要定義乙個struct passwd 型別的指標來接收函式返回值。指標指向的即是該檔案的passwd屬性。

標頭檔案是

*2. struct group getgrgid(gid_t gid);

函式作用是根據檔案gid查詢檔案的組資訊,如組員、組名、組id等,同樣要先得到(stat())檔案的gid用作引數,定義乙個struct group 型別的指標去接受返回值,操作成功則指標指向這個檔案的組資訊結構體。

標頭檔案是

***size_t strftime(char strdest,size_t maxsize,const char format,const struct tm timeptr);

第乙個引數應該是乙個事先定義好的乙個字元陣列名;第二個引數是輸出字元個數上限,這個數字應該小於等於定義好的字元陣列最大值;第三個引數是限定輸出內容,格式如「%d %h :%c」,雙引號內%是轉義符,轉義內容有很多,多個轉義符之間也可以新增空格冒號之內任意需要的符號,最後乙個引數是乙個struct tm *型別的值,最後就可以將需要的內容放在strdest字串中,然後輸出字串,就可以得到結果。

%a 星期幾的簡寫;%a 星期幾的全稱;%b 月分的簡寫;%b 月份的全稱;%c 標準的日期的時間串;%c 年份的後兩位數字;%d 十進位制表示的每月的第幾天;%d 月/天/年;%e 在兩字元域中,十進位制表示的每月的第幾天;%f 年-月-日;%g 年份的後兩位數字,使用基於周的年;%g 年分,使用基於周的年;%h 簡寫的月份名;%h 24小時制的小時;%i 12小時制的小時;%j 十進位制表示的每年的第幾天;%m 十進位制表示的月份;%m 十時制表示的分鐘數;%n 新行符;%p 本地的am或pm的等價顯示;%r 12小時的時間;%r 顯示小時和分鐘:hh:mm;%s 十進位制的秒數。

**1. int link(char pathname1,char pathname2);

功能是建立乙個硬鏈結檔案,第乙個引數是原檔案,第二個引數是硬鏈結檔案名字。返回值是0,-1對錯碼。

標頭檔案是

*2. int unlink(char pathname);

函式用於刪除乙個檔案,但是如果該檔案有多個硬鏈結,那麼執行一次僅僅是刪除乙個硬鏈結,直到最後才會刪除原檔案。返回值是0,-1對錯碼。

標頭檔案是

*3. int symlink(char actualpath,char * sympath);

功能是建立乙個符號鏈結(軟鏈結),第乙個引數表示原檔案,第二個引數表示符號鏈結名。返回值是0,-1對錯碼。

標頭檔案是

4. int readlink(char * pathname,char * buf,int bufsize);

功能是讀取乙個軟鏈結的原檔案,第乙個引數是符號鏈結名,第二個引數是存原檔名的快取區域,應該事先定義好,第三個引數是快取區大小,應該要小於等於定義時的大小,返回值錯誤返回0,成功返回實際寫入緩衝區的位元組數。

標頭檔案是

1. int dup(int oldfd);

乙個檔案描述符,返回值就是這個複製得到的檔案描述符。

標頭檔案是

2. int dup2(int oldfd,int newfd);

複製乙個檔案描述符,第乙個引數是檔案的原描述符,第二個引數是希望得到的新的檔案描述符,但是兩個函式實際上都是複製乙個描述符指向同乙個檔案。

標頭檔案是

1. int chown(const char * path,uid_t owner,gid_t group);

函式用於改變指定檔案的主人和組,第乙個引數是指定的檔案路徑名稱,第二個引數是新的檔案主id,第三個引數是新的組id。返回值是0,-1對錯碼。

標頭檔案是

2. int fchown(int fd,uid_t owner,gid_t group);

也是用於修改指定檔案的主人和所在組,不過第乙個引數要使用檔案描述符,所以需要先開啟檔案獲得檔案描述符。

標頭檔案是

*3. int lchown(const char path,uid_t owner,gid_t group);

函式任然是用於修改指定檔案的主人和所在組,不過檔案物件是符號鏈結檔案才可以。

標頭檔案是

*4. int chmod(const char path,mode_t mode);

函式用於改變指定檔案的訪問許可權,第乙個引數是指定檔案的檔案路徑名,第二個引數是新的訪問許可權。

標頭檔案是

5. int fchmod (int fd,mode_t mode);

函式用於改變指定檔案的訪問許可權,第乙個引數是指定檔案檔案描述符,所以需要先開啟檔案,第二個引數是新的訪問許可權。

標頭檔案是

6. int utime(const char * filename,struct utimebuf * buf);

用於改變指定檔案的訪問時間和修改時間。第乙個引數是要修改檔案的檔案名字,第二個引數是新的訪問時間和修改時間。

標頭檔案是

*7. int truncate(const char path,off_t length);

用於改變檔案的長度,第乙個引數是檔案的路徑名,第二個引數是檔案的指定長度。

標頭檔案是

8. int ftruncate(int fd,off_t length);

用於改變檔案的長度,第乙個引數是檔案的檔案描述符,第二個引數是檔案的指定長度。

標頭檔案是

在實際應用中,這篇部落格的內容實際上很少使用,應為一般實現這些函式功能都會選擇使用命令來實現,所以這也告訴我們,在使用linux的時候,要合理地使用命令和程式兩種控制控制方法。

Linux系統程式設計8 檔案I O

fcntl.h 標頭檔案,file control的縮寫。open函式,openat函式 int open const char path,int oflag int openat int fd,const char path,int oflag 將準備開啟的檔案或是裝置的名字作為引數path傳給函...

Linux系統程式設計(七)檔案許可權系統呼叫

包含標頭檔案 include 函式原型 int access const char pathname,int mode 引數 返回值 access 示例 include include intmain printf 檔案存在 return0 包含標頭檔案 include 函式原型 int chmod...

Linux系統程式設計 檔案

linux檔案描述符 系統呼叫 作業系統的五大功能之一就是對檔案管理 在現代作業系統中,要利用大量的程式和資料,由於記憶體容量有限,而且不能長期儲存,於是把這些資料以檔案的形式放在外存中,需要的時候再將它調入記憶體,從此就有了檔案系統。負責管理在外存上的檔案,並把訪問和共享 保護等手段提供給使用者。...