這算是在博客園寫的第一篇文章啊,之前都在csdn寫(雖然才寫了幾篇,因為開通也沒多少天。。),還是稍微期待下吧。我寫博客的主要意圖是一來能夠記錄下來自己所學過的東西,二來也想能夠跟大家交流,能夠得到更多的意見,來使自己進步。我現在是個大學生,學到的東西還真沒多少,所以寫出來的東西沒營養望能理解。
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
創建硬鏈接和解除硬鏈接的函數
link和unlink函數:
#include <unistd.h>
int link(const char *existingpath, const char *newpath);
返回值:成功返回0,出錯返回-1
此函數創建一個新的目錄項newpath,它引用現有的文件existingpath。若newpath已經存在,則返回出錯。只創建newpath中的最后一個分量,路徑中的其他部分應當已經存在。
只有超級用戶才支持創建一個指向目錄的硬鏈接,因為有可能創建不當的話會引起循環,然后崩潰(第一版的作者試過,文件系統就崩潰了)。因此很多文件系統實現不允許對于目錄的硬鏈接。(我剛剛在自己的linux系統上試過,真的是不能夠對目錄來進行硬鏈接)
為了刪除對一個現有的目錄項,可以調用unlink函數。
#include <unistd.h>
int unlink(const char *pathname);
返回值:成功返回0,出錯返回-1
此函數刪除目錄項,并將由pathname所引用的文件的鏈接計數減1.如果出錯,則不對該文件做任何修改。
為了解除對文件的鏈接,必須對包含該目錄項的目錄具有寫和執行的權限。
符號鏈接
符號鏈接跟硬鏈接最大的區別就是修改了硬鏈接,其文件內容會改變。而符號鏈接只是個指向一個文件的間接指針。符號鏈接這種文件類型保存的僅僅是文件名。當使用以文件名作為參數的函數時,應當了解函數是否能處理符號鏈接。也就是該函數能否跟隨符號鏈接到達它所鏈接的文件。下面列出了本章所說明的各個函數能否處理符號鏈接。
symlink和readlink函數
symlink函數創建了一個符號鏈接。
#include <uinstd.h>
int symlink(const char *actualpath, const char *sympath);
返回值:成功返回0,出錯返回-1
創建符號鏈接時,并不要求actualpath已經存在,而且兩個參數也并不需要在同一個文件系統匯中(硬鏈接要)。
因為open函數跟隨符號鏈接,所以需要一種方法來打開鏈接本身,并讀鏈接中的名字。readlink函數提供了這種功能。
#include <unistd.h>
ssize_t readlink(const char *pathname, char *buf, size_t bufsize);
返回值:成功返回讀到的字節數,出錯返回-1
此函數組合了open、read、和close的所有操作。如果此函數執行成功,則它返回讀入buf的字節數。在buf中返回的符號鏈接的內容不以NULL字符終止。
文件的時間
前兩個是對于文件的內容的,第三個是對于文件的狀態的,即有關i節點的。
目錄是包含目錄項(文件名和相關i節點編號)的文件,增加、刪除和修改目錄項會影響到與其所在目錄相關的三個時間。下面給出各種函數對時間的作用:
用mkdir函數創建目錄,用rmdir函數刪除目錄
#include <sys/stat.h>
int mkdir(const char *pathname, mode_t mode);
返回值,成功返回0,出錯返回-1
其中,dot和dot dot是自動創建的,所指定的文件訪問權限mode由進程的文件模式創建屏蔽字修改。
用rmdir函數可以刪除一個空目錄。空目錄是只包含dot和dot dot這兩項的目錄。
#include <unistd.h>
int rmdir(const char *pathname);
返回值:成功返回0,出錯返回-1
新聞熱點
疑難解答