亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 操作系統 > 正文

文件和目錄之link、unlink、remove和rename函數

2024-06-28 13:28:47
字體:
來源:轉載
供稿:網友
文件和目錄之link、unlink、remove和rename函數

任何一個文件可以有多個目錄項指向其i節點。創建一個指向現有文件的鏈接的方法是使用link函數。

#include <unistd.h>int link( const char *existingpath, const char *newpath );返回值:若成功返回0,若出錯返回-1

此函數創建一個新目錄項newpath,它引用現有的文件existingpath。如若newpath已經存在,則返回出錯。只創建newpath中的最后一個分量,路徑中的其他部分應當已經存在。

創建新目錄項以及增加鏈接計數應當是個原子操作。雖然POSIX.1允許實現支持跨文件系統的鏈接,但是大多數實現要求這兩個路徑名在同一個文件系統中。如果實現支持創建指向一個目錄的硬鏈接,那么也僅限于超級用戶才可以這樣做。其理由是這樣做可能在文件系統中形成循環,大多數處理文件系統的實用程序都不能處理這種情況。因此很多文件系統實現不允許對目錄的硬鏈接。

為了刪除一個現有的目錄項,可以調用unlink函數。

#include <unistd.h>int unlink( const char *pathname );返回值:若成功則返回0,若出錯則返回-1

此函數刪除目錄項,并將由pathname所引用文件的鏈接計數減1。如果還有指向該文件的其他鏈接,則仍可通過其他鏈接訪問該文件的數據。如果出錯,則不對該文件做任何更改。

為了解除對文件的鏈接,必須對包含該目錄項的目錄具有寫和執行的權限。如果對該目錄設置了粘住位,則對該目錄必須具有寫權限,并且具備下面三個條件之一:

擁有該文件。

擁有該目錄。

具有超級用戶特權。

只有當鏈接計數達到0時,該文件的內容才可被刪除。另一個條件也會阻止刪除文件的內容——只要有進程打開了該文件,其內容也不能刪除。關閉一個文件時,內核首先檢查打開該文件的進程數。如果該數達到0,然后內核檢查其鏈接數,如果這個數也是0,那么就刪除該文件的內容。

程序清單4-5 打開一個文件,然后unlink它

[root@localhost apue]# cat PRog4-5.c#include "apue.h"#include <fcntl.h>int main(void){        if(open("tempfile", O_RDWR) < 0)                err_sys("open error");        if(unlink("tempfile") < 0)                err_sys("unlink error");        printf("file unlinked/n");        sleep(15);        printf("done/n");        exit(0);}

運行該程序,其結果是:

[root@localhost apue]# ls -l tempfile-rw-r--r-- 1 root root 38117937 01-02 18:18 tempfile[root@localhost apue]# df /home文件系統               1K-塊        已用     可用      已用% 掛載點/dev/sda3         15289132   
209228
  14290712   2% /home[root@localhost apue]# ./prog4-5 &[1] 5152[root@localhost apue]# file unlinked[root@localhost apue]# ls -l tempfilels: tempfile: 沒有那個文件或目錄                                                                         此時,目錄項已刪除[root@localhost apue]# df /home文件系統               1K-塊        已用     可用      已用% 掛載點/dev/sda3         15289132    209228  14290712   2% /home                                   從已用/可用空間可以看出該文件內容還沒有刪除[root@localhost apue]# done[root@localhost apue]# df /home文件系統               1K-塊        已用     可用      已用% 掛載點/dev/sda3         15289132    171956  14327984   2% /home                                   睡眠結束后,進程結束,此時才刪除了該文件內容

unlink的這種性質經常被程序用來確保即使是在該程序崩潰時,它所創建的臨時文件也不會遺留下來。進程用open或creat創建一個文件,然后立即調用unlink。因為該文件仍舊是打開的,所以不會將其內容刪除。只有當進程關閉該文件或終止時(在這種情況下,內核會關閉該進程打開的全部文件),該文件的內容才會被刪除。

如果pathname是符號鏈接,那么unlink刪除該符號鏈接,而不會刪除由該鏈接所引用的文件。給出符號鏈接名情況下,沒有一個函數能刪除由該鏈接所引用的文件。

超級用戶可以調用unlink,其參數pathname指定一個目錄,但是通常應當使用rmdir函數,而不是使用這種方式。

我們也可以用remove函數解除對一個文件或目錄的鏈接。對于文件,remove的功能與unlink相同。對于目錄,remove的功能與rmdir相同。

#include <stdio.h>int remove( const char *pathname);返回值:若成功則返回0,若出錯則返回-1

文件或目錄用rename函數更名。

#include <stdio.h>int rename( const char *oldname, const char *newname );返回值:若成功則返回0,若出錯則返回-1

根據oldname是指文件還是目錄,有幾種情況要加以說明。我們也應說明如果newname已經存在將會發生什么。

(1)如果oldname指的是一個文件而不是目錄,那么為該文件或符號鏈接更名。在這種情況下,如果newname已存在,則它不能引用一個目錄。如果newname已存在,而且不是一個目錄,則先將該目錄項刪除然后將oldname更名為newname。對包含oldname的目錄以及包含newname的目錄,調用進程必須具有寫權限,因為將更改這兩個目錄。

(2)如果oldname指的是一個目錄,那么為該目錄更名。如果newname已存在,則它必須引用一個目錄,而且該目錄應當是空目錄(空目錄指的是該目錄中只有.和..項)。如果newname存在(而且是一個空目錄),則先將其刪除,然后將oldname更名為newname。另外,當為一個目錄更名時,newname不能包含oldname作為其路徑前綴。例如,不能將/usr/foo更名為/usr/foo/testdir,因為舊名字(/usr/foo)是新名字的路徑前綴,因而不能將其刪除。

(3)如若oldname或newname引用符號鏈接,則處理的是符號鏈接本身,而不是它所引用的文件。

(4)作為一個特例,如果oldname和newname引用同一文件,則函數不做任何更改而成功返回。

如若newname已經存在,則調用進程對它需要有寫權限(如同刪除情況一樣)。另外,調用進程將刪除oldname目錄項,并可能要創建newname目錄項,所以它需要對包含oldname以及newname的目錄具有寫和執行權限。

本篇博文內容摘自《UNIX環境高級編程》(第二版),僅作個人學習記錄所用。關于本書可參考:http://www.apuebook.com/


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美专区在线观看| 7m第一福利500精品视频| 国产精品成人观看视频国产奇米| 中文字幕欧美视频在线| 中文字幕一区电影| 亚洲成年人在线| 欧美在线视频免费| 久久夜色精品亚洲噜噜国产mv| 亚洲精品91美女久久久久久久| 欧美激情免费看| 欧美日韩福利视频| 福利微拍一区二区| 国产精品三级在线| 日日狠狠久久偷偷四色综合免费| 欧美精品福利视频| 欧美日韩国产91| 亚洲男人天堂视频| 亚洲视频第一页| 亚洲第一福利网站| 欧美日韩视频免费播放| 亚洲欧美日韩一区二区在线| 国产视频观看一区| 欧美日韩国产精品一区二区三区四区| 国产一区二区三区高清在线观看| 国产日产亚洲精品| 亚洲最大福利网站| 日韩av免费观影| 成人黄色片在线| yellow中文字幕久久| 亚洲一区二区中文字幕| 久久久久999| 97**国产露脸精品国产| 九九热精品在线| 色综合亚洲精品激情狠狠| 精品久久久久久电影| 中文字幕欧美日韩va免费视频| 国产精品三级网站| 美女av一区二区| 日韩中文字幕在线| 亚洲电影免费观看高清完整版在线| 亚洲欧美一区二区三区在线| 97不卡在线视频| 国产精品欧美激情在线播放| 欧美日韩激情美女| 两个人的视频www国产精品| 亚洲国产小视频在线观看| 亚洲精品一区二区三区不| 92版电视剧仙鹤神针在线观看| 亚洲图片在线综合| 国产精品偷伦一区二区| 色狠狠av一区二区三区香蕉蜜桃| 国产精品欧美亚洲777777| 伊人久久免费视频| 亚洲另类图片色| 精品久久久久久| 精品久久久久久久久久久久| 国产热re99久久6国产精品| 日本成人免费在线| 精品国产乱码久久久久久天美| 91青草视频久久| 91精品国产免费久久久久久| 国产在线视频一区| 国产成人一区二区三区小说| 亚洲美女av电影| 永久免费看mv网站入口亚洲| 欧美另类交人妖| 国产美女久久久| 午夜精品久久久久久久99热浪潮| 中文字幕欧美精品在线| 亚洲欧美成人精品| 尤物99国产成人精品视频| 精品中文字幕在线2019| 亚洲免费成人av电影| 欧美精品999| 精品偷拍一区二区三区在线看| 欧美日韩美女在线观看| 一级做a爰片久久毛片美女图片| 国产精品久久久久久久久借妻| 国产精品久久久久久久久影视| 亚洲精品在线视频| 成人看片人aa| 国产日产亚洲精品| 91免费版网站入口| 亚洲人在线视频| 精品国偷自产在线视频99| 亚洲日本欧美日韩高观看| 4438全国亚洲精品在线观看视频| 色视频www在线播放国产成人| 国产成人一区二| 欧美日韩国产一区中文午夜| 97在线看福利| 日韩av大片免费看| 欧美日韩免费网站| 亚洲精品美女在线观看播放| 精品国产成人在线| 亚洲va欧美va国产综合久久| 国产女人18毛片水18精品| 亚洲欧美综合另类中字| 欧美另类交人妖| 精品国产美女在线| 欧美午夜视频一区二区| 国产视频999| 亚洲国产精品99| 亚洲欧美日韩综合| 超薄丝袜一区二区| 精品日韩美女的视频高清| 正在播放亚洲1区| 亚洲第一色在线| 精品欧美aⅴ在线网站| 精品呦交小u女在线| 日韩av在线免费观看一区| 日韩av黄色在线观看| 日韩美女福利视频| 日韩成人性视频| 亚洲人成电影网| 91在线色戒在线| 日韩av快播网址| 日韩在线视频国产| 国产成人aa精品一区在线播放| 亚洲成人av在线| 亚洲国产高清高潮精品美女| 国产美女精品免费电影| 亚洲人成绝费网站色www| 欧美一级片一区| 国产精品美女久久| 亚洲综合中文字幕在线| 久久免费国产视频| 亚洲激情在线观看视频免费| 欧美日韩xxx| 高清欧美性猛交xxxx黑人猛交| 亚洲a级在线观看| 成人伊人精品色xxxx视频| 久久久成人av| 疯狂欧美牲乱大交777| 欧美性猛交xxxx黑人猛交| 国产成人亚洲综合91| 91免费国产网站| 成人激情视频网| 亚洲级视频在线观看免费1级| 91免费欧美精品| 久久精品视频亚洲| 欧美在线一级视频| 欧美一区二区.| 7m第一福利500精品视频| 国产精品91久久久| 久久精品99无色码中文字幕| 国产亚洲精品美女久久久久| 2019亚洲男人天堂| 国产精品日韩久久久久| 伊人男人综合视频网| 视频在线观看99| 国产精品视频公开费视频| 久久综合伊人77777尤物| 亚洲丁香婷深爱综合| 久久精品国产v日韩v亚洲| 欧美成人午夜免费视在线看片| 日韩中文字幕免费看| 久久男人av资源网站| 欧美国产日韩一区二区三区| 欧美激情精品久久久久久大尺度| 国产亚洲一区二区在线| 久久久www成人免费精品| 91免费观看网站| 91性高湖久久久久久久久_久久99|