Linux鏈接文件操作

1.      鏈接的分類:

鏈接分爲軟鏈接和硬鏈接:

1>    軟鏈接:

軟鏈接又叫符號鏈接,這類文件包含了另外一個文件的路徑。可以連接任意文件和目錄,也可以連接不同的文件系統文件,也可以連接不存在的文件,還可以循環連接自己。

2>    硬鏈接是一個已存在文件的另一個名字。注意:

1)       只能在同一個文件系統中的文件才能創建硬鏈接;

2)       不允許給目錄創建硬鏈接。

2.      在shell界面使用ln命令創建鏈接

        當我們需要在不同的目錄,用到相同的文件時,我們不需要在每一個需要的目錄下都放一個必須相同的文件,我們只要在某個固定的目錄,放上該文件,然後在其它的目錄下用ln命令鏈接(link)它就可以,不必重複的佔用磁盤空間。例如:

  ln  –s  /bin/less   /usr/local/bin/less,其中-s 是代號(symbolic)的意思。

如果你用ls察看一個目錄時,發現有的文件後面有一個@的符號,那就是一個用ln命令生成的文件,用ls –l命令去察看,就可以看到顯示的link的路徑了。

 

 這裏有兩點要注意:

1>    ln命令會保持每一處鏈接文件的同步性,也就是說,不論你改動了哪一處,其它的文件都會發生相同的變化;

2>    ln的鏈接又軟鏈接和硬鏈接兩種:

1)       軟鏈接創建指令:ln –s filename  link_filename,意爲創建一個名爲                  “link_filename”指向“filename”的鏈接文件,它只會在你選定的位置上生成一          個文件的鏡像,類似windows下的快鍵方式。

2)       硬鏈接創建指令:ln  filename  link_filename,沒有參數-s, 它會在        你選定的位置上生成一個和源文件大小相同的文件。

 

        無論是軟鏈接還是硬鏈接,文件都保持同步變化。

 

 

 

   指令參數詳細說明:

-f : 鏈結時先將與 dist 同檔名的檔案刪除

-d : 允許系統管理者硬鏈結自己的目錄

-i : 在刪除與 dist 同檔名的檔案時先進行詢問

-n : 在進行軟連結時,將 dist 視爲一般的檔案

-s : 進行軟鏈結(symbolic link)

-v : 在連結之前顯示其檔名

-b : 將在鏈結時會被覆寫或刪除的檔案進行備份

-S SUFFIX : 將備份的檔案都加上 SUFFIX 的字尾

-V METHOD : 指定備份的方式

--help : 顯示輔助說明

--version : 顯示版本

 

 

3.      C程序中使用link函數創建

link函數申明如下:

#include <unistd.h>

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

函數說明:link()以參數newpath 指定的名稱來建立一個新的鏈接(硬鏈接)到參數oldpath 所指定的已存在文件. 如果參數newpath 指定的名稱爲一已存在的文件則不會建立鏈接。

返回值:成功則返回0, 失敗返回-1, 錯誤原因存於errno。

錯誤代碼:

 1、EXDEV 參數oldpath 與newpath 不是建立在同一文件系統.

 2、EPERM 參數oldpath 與newpath 所指的文件系統不支持硬連接

 3、EROFS 文件存在於只讀文件系統內

 4、EFAULT 參數oldpath 或newpath 指針超出可存取內存空間.

 5、ENAMETOLLONG 參數oldpath 或newpath 太長

 6、ENOMEM 核心內存不足

 7、EEXIST 參數newpath 所指的文件名已存在.

 8、EMLINK 參數oldpath 所指的文件已達最大連接數目.

 9、ELOOP 參數pathname 有過多符號連接問題

 10、ENOSPC 文件系統的剩餘空間不足.

 11、EIO I/O 存取錯誤.

 

範例:

 /* 建立/etc/passwd 的硬連接爲pass */

 #include<unistd.h>

 main()

 {

    link("/etc/passwd", "pass");

 } 

發佈了30 篇原創文章 · 獲贊 11 · 訪問量 5萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章