婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > Linux unlink函數和刪除文件的操作方法

Linux unlink函數和刪除文件的操作方法

熱門標簽:淘寶辦理400電話是多少 申請400電話收費標 網絡電話外呼系統開發 艾澤拉斯地圖標注 菏澤自動電銷機器人公司 滴滴急救中心地圖標注 北海智能電銷機器人公司 福州語音電銷機器人招商 外呼線路隨意切換嗎

1. unlink函數

  對于硬鏈接來說,unlink 用來刪除目錄項,并把 inode 引用計數減 1,這兩步也是一個原子過程。直到 inode 引用計數為 0,才會真正刪除文件。

  對于軟鏈接來說,unlink 直接刪除軟鏈接,而不影響軟鏈接指向的文件。

函數原型:

int unlink(const char *pathname);  

參數說明:

  pathname:指定要移除的鏈接文件

返回值說明:

  成功返回0;失敗則返回-1,同時設置errno為相應值

2. 實驗代碼—myunlink

#include <unistd.h>
#include <stdlib.h>
#include <stdio.h>
int main(int argc, char *argv[]){ 
 //為一個已經存在的文件創建目錄項(硬鏈接)
 if(link(argv[1], argv[2]) == -1){
 perror("link error");
 exit(1);
 }
 //刪除之前的文件目錄項
 if(unlink(argv[1]) == -1){
 perror("unlink error");
 exit(1);
 }
 return 0;
}

  當我們執行./myunlink hellotest命令完后,會刪除 hellotest,同時 inode 引用計數減 1。

3. 刪除文件

  不用說,相信大家都用過rm -rf命令吧。

  現在我們再來思考一下,以前我們通過rm命令刪除文件時你有沒有質疑過,文件真的被刪除掉了嗎?

  如果真的刪除的了話,那么操作系統又是怎么把文件刪除掉的?

  操作系統在設計的時候是通過把文件的inode索引號與磁盤中的block塊建立了關聯,這樣我們通過文件找到block塊的位置,也就看到了文件的數據了。

  在刪除文件時,是由系統的2個變量來控制的一個是i_link,表示文件的硬鏈接數量,另一個是i_count,表示文件的引用計數,文件刪除的必需條件就是i_link = 0和i_count = 0。

  在磁盤中的文件只要把i_link = 0(硬鏈接數干掉)就可以把文件刪除了,如果這個文件在程序中被打開,我們還需要把運行的程序干掉 i_count = 0,這樣才能達到刪除文件的目的。

4. linux下刪除文件的大概過程

  linux下文件刪除過程大概如圖: 

 

圖1-linux下文件刪除的大概過程

  當前磁盤中的/test/file目錄下有一個test文件(i_link = 1),還有一個硬鏈接文件hard_link指向test文件(i_link = 1),且./test進程又打開了test文件(i_count = 1),如果要刪除test.txt文件,必須把./test進程干掉(i_count = 0),然后刪除hard_link硬鏈接文件和/test/file目錄下的test.txt文件(也就是讓i_link = 0)。

  也就是說linux下是通過link的數量來控制文件刪除的,當一個文件的link = 0時,這個文件才會被刪除。一般一個文件有2個link計數器,一個是i_link和i_count。

  i_count是當前進程打開文件的引用計數,i_link是文件鏈接的數量,可以把i_count理解為內存中文件的計數器,而i_link是磁盤中的計數器。對于rm命令來說實際就是設置磁盤中文件的i_link計數為0。如果一個文件被進程所使用,而用戶又執行了rm命令把文件刪除掉了,此時程序還能正常執行,依舊能從文件中讀取正確的數據,這是因為rm命令只是把i_link設置為 0(是將文件到inode的關聯斷開,并沒有刪除掉inode與磁盤中的block數據塊,此時停止進程,被刪除的數據可以找回來,如果進程正在寫入數據,那么磁盤的block塊的數據會被進程寫入的數據覆蓋掉,原先的數據就恢復不了了)。

  而進程仍然在引用該文件i_count = 1,執行rm命令系統并不會真正的刪除該文件,如果要刪除該文件必須讓進程解除對該文件的引用計數,也就是把進程干掉,這樣文件才會被真正的刪除掉。

  即便如此,文件真的被刪除了嗎?前面我們說過文件的數據是存儲在磁盤上block塊中,當我們要查找文件當中的數據時并不是直接找到磁盤上的block塊,因為磁盤上的block塊實在是太多了,你怎么就知道你的數據存儲在哪個block塊中?

  假設你一不小心把非常重要的數據刪除掉了,這將意味著你的數據就永遠也找不回來了,從而造成無法挽回的損失了,由此可見數據的重要性,因此操作系統不會輕易把數據從磁盤中真正的刪除掉。

  看到這里,相信你已經明白了,實際上你所謂的右鍵刪除操作只是把文件的inode索引號與磁盤中的block的關聯斷開了而已,但文件的數據并沒有真正的被刪除掉。如果你想真的刪除數據的話,要么把磁盤格式化,要么把原先的數據刪除掉,然后寫入新的數據覆蓋掉,當然,你也可以選擇格式化和數據覆蓋雙重保險,這個時候你的數據想要恢復基本上是非常困難的,即便可以頂多只能恢復一部分數據了吧。

  如果你真的一不小心刪除了很重要的數據的話,這個時候趕緊恢復數據,其他的任何多余的操作盡量不要做,這樣在數據恢復過程中才能盡量減少數據丟失。

5. myunlink2.c程序

#include <unistd.h>
#include <fcntl.h>
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
 /*
 unlink函數是刪除一個dentry
 */
int main(void){
 int fd;
 char *p = "test of unlink\n";
 char *p2 = "after write something.\n";
 //當進程打開temp.txt文件時,引用計數會+1
 fd = open("temp.txt", O_RDWR|O_CREAT|O_TRUNC, 0644);
 if(fd < 0){
 perror("open temp error");
 exit(1);
 }
 //具備了被釋放的條件
 int ret = unlink("temp.txt"); 
 if(ret < 0){
 perror("unlink error");
 exit(1);
 }
 //向temp.txt文件寫入第一個字符串,通過返回值判斷寫操作是否成功
 ret = write(fd, p, strlen(p));
 if (ret == -1) {
 perror("-----write error");
 }
 printf("hi! I'm printf\n");
 //向temp.txt文件寫入第二個字符串,通過返回值判斷寫操作是否成功
 ret = write(fd, p2, strlen(p2));
 if (ret == -1) {
 perror("-----write error");
 }
 printf("Enter anykey continue\n");
getchar();
 //當close關閉fd的時候,進程對文件的引用計數就會-1,斷開進程與文件的關聯關系
 close(fd);
 return 0;
}

程序運行結果:

  程序的運行結果和我們所預料的一樣,當程序運行的時候,調用open函數創建并打開了temp.txt文件,此時進程對temp文件的引用計數i_count會加1,同時temp文件本身也會有一個i_link鏈接計數也會加1。

  當調用了unlink函數刪除temp文件時,只是把i_link鏈接計數減1,而進程的i_count計數還是1,并沒有斷開與temp文件的關聯關系,因此進程可以調用write函數往temp文件里面寫數據,自然也就能成功了。當程序運行結束后,調用close關閉對temp文件的引用,此時temp文件就會被操作系統刪除掉。

6. 總結

  在不了解文件系統原理的情況下,通常我們會認為數據已經刪除掉,其實不然,磁盤上的文件數據還在,只是把dentry目錄和磁盤上的數據的聯系斷開,我們找不到數據肯定會認為刪掉了,但是只要我們想辦法讓數據和dentry目錄之間重新建立連接,就可以讓刪除的數據恢復。

  因此我們刪除文件,從某種意義上說,只是讓文件具備了被釋放的條件,至于什么時候釋放這取決于操作系統。

  對于unlink函數來說,清除文件時,如果文件的硬鏈接數到0了,沒有dentry對應,但該文件仍不會馬上被釋放。要等到所有打開該文件的進程關閉該文件,系統才會挑時間將該文件釋放掉。

7. 不要隨便使用rm命令

  相信看到這里,你應該知道了,數據對于計算機的重要性了,因為一旦某些至關重要的數據刪除了,那就真的永遠沒了,這也是操作系統為什么不直接將數據從磁盤中刪除的原因。但也不要因為這樣,你就可以肆無忌憚的使用rm命令了,因為有時候數據刪除了,并不能百分百的恢復回來。

總結

以上所述是小編給大家介紹的Linux unlink函數和刪除文件的操作方法,希望對大家有所幫助,也非常感謝大家對腳本之家網站的支持!

標簽:混顯 延安 丹東 資陽 三沙 滄州 亳州 賀州

巨人網絡通訊聲明:本文標題《Linux unlink函數和刪除文件的操作方法》,本文關鍵詞  Linux,unlink,函數,和,刪除,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《Linux unlink函數和刪除文件的操作方法》相關的同類信息!
  • 本頁收集關于Linux unlink函數和刪除文件的操作方法的相關信息資訊供網民參考!
  • 推薦文章
    婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av
    中文字幕av一区 二区| 亚洲乱码国产乱码精品精的特点 | 9久草视频在线视频精品| 在线观看一区二区精品视频| 精品噜噜噜噜久久久久久久久试看| 亚洲欧洲韩国日本视频| 精品一区二区在线观看| 国产成人免费视频| 欧美日韩精品一区二区三区四区| 国产精品久久久久永久免费观看| 奇米影视在线99精品| 色88888久久久久久影院野外| 久久色在线观看| 日本成人中文字幕在线视频| 91成人看片片| 亚洲欧美日韩中文字幕一区二区三区 | 91精品国产色综合久久不卡电影 | 亚洲日本一区二区三区| 久久精品国产亚洲5555| 欧美日韩一区二区电影| 亚洲免费资源在线播放| 99久久免费国产| 国产精品免费aⅴ片在线观看| 国产美女在线观看一区| 精品久久久久久无| 国内一区二区在线| wwww国产精品欧美| 精品一区二区在线看| 精品国产不卡一区二区三区| 免费成人在线影院| 精品欧美黑人一区二区三区| 久久精品免费看| 精品国产伦一区二区三区观看方式| 五月激情综合婷婷| 欧美一级生活片| 日日欢夜夜爽一区| 日韩欧美国产精品| 国产资源精品在线观看| 国产午夜久久久久| 成人avav影音| 亚洲综合图片区| 欧美女孩性生活视频| 免费在线观看一区| 久久精品一区二区三区不卡牛牛| 国产福利91精品一区| 中文字幕日韩一区| 欧美日韩在线免费视频| 免费成人你懂的| 国产亚洲一区字幕| 色婷婷国产精品| 亚洲成人手机在线| 久久中文字幕电影| 色综合天天综合在线视频| 夜夜爽夜夜爽精品视频| 日韩久久免费av| av福利精品导航| 日韩高清不卡一区| 国产欧美精品在线观看| 欧美日精品一区视频| 国产在线精品一区二区| 亚洲天堂成人网| 日韩免费观看高清完整版| 国产91精品一区二区麻豆网站 | 亚洲一区二区三区小说| 91麻豆精品久久久久蜜臀| 国产激情精品久久久第一区二区| 亚洲美女少妇撒尿| 欧美精品一区二区三区高清aⅴ | 丁香亚洲综合激情啪啪综合| 一级日本不卡的影视| 久久久精品2019中文字幕之3| 99国产麻豆精品| 久久99久久99小草精品免视看| 国产精品国产三级国产a| 欧美一级片免费看| 日本精品一级二级| 国产xxx精品视频大全| 日本中文字幕一区二区视频| 国产精品欧美经典| 精品久久久久一区| 欧美日韩一区二区三区视频| 国产91精品露脸国语对白| 日日骚欧美日韩| 一区二区欧美视频| 国产精品区一区二区三区| 精品久久久三级丝袜| 69p69国产精品| 欧亚一区二区三区| 99精品欧美一区| 国产成a人无v码亚洲福利| 免费看精品久久片| 亚洲电影第三页| 亚洲毛片av在线| 国产精品久久久久久久蜜臀| 精品国产凹凸成av人导航| 666欧美在线视频| 欧美亚洲综合在线| 色乱码一区二区三区88| 成人精品视频一区二区三区尤物| 黄色日韩网站视频| 蜜桃视频免费观看一区| 日日夜夜精品视频免费| 午夜久久久久久电影| 亚洲精品中文字幕在线观看| 国产精品盗摄一区二区三区| 欧美国产一区视频在线观看| 欧美精品一区二区三区蜜桃视频| 精品久久久久久亚洲综合网| 欧美成人性福生活免费看| 日韩视频不卡中文| 日韩精品中文字幕在线不卡尤物| 欧美精品久久一区| 日韩亚洲欧美高清| 精品捆绑美女sm三区| 久久午夜色播影院免费高清 | 欧美videos中文字幕| 日韩午夜激情av| 精品国产污网站| 国产亚洲综合性久久久影院| 亚洲国产精品成人久久综合一区| 国产欧美精品一区二区三区四区| 国产精品素人视频| 一区二区三区国产豹纹内裤在线| 夜夜操天天操亚洲| 首页国产欧美久久| 美国精品在线观看| 国产精品一级在线| www.欧美.com| 欧美日韩一级二级三级| 日韩欧美在线1卡| 国产欧美日韩精品一区| 亚洲美女屁股眼交| 秋霞影院一区二区| 国产成人一区二区精品非洲| 99久久精品国产一区| 欧美性三三影院| 精品国产第一区二区三区观看体验| 久久新电视剧免费观看| 亚洲免费观看高清完整版在线观看| 午夜视频一区在线观看| 国产大陆a不卡| 色视频一区二区| 日韩精品一区二区三区swag| 中文字幕日本不卡| 日日摸夜夜添夜夜添精品视频| 国产 日韩 欧美大片| 在线看国产一区| 久久久一区二区三区捆绑**| 亚洲欧美日韩在线| 久久99精品国产麻豆不卡| 99久久免费视频.com| 日韩欧美亚洲国产精品字幕久久久| 欧美国产国产综合| 天堂久久一区二区三区| av成人老司机| 精品少妇一区二区三区| 一区二区三区精品在线| 国产精品18久久久久久久久| 欧美欧美欧美欧美首页| 亚洲欧洲日本在线| 国内外精品视频| 欧美三级视频在线| 《视频一区视频二区| 久久精品国产亚洲aⅴ | 色av一区二区| 国产无人区一区二区三区| 日韩高清一级片| 91官网在线观看| 国产精品久久久久婷婷二区次| 国内偷窥港台综合视频在线播放| 欧美男同性恋视频网站| 一区二区三区四区亚洲| gogo大胆日本视频一区| 国产视频一区在线播放| 久久99精品一区二区三区三区| 欧美日韩国产一级二级| 亚洲日本韩国一区| 成人av午夜影院| 欧美国产激情二区三区| 国产成人精品免费在线| 亚洲精品在线免费观看视频| 免费观看成人鲁鲁鲁鲁鲁视频| 色婷婷av一区二区三区大白胸| 国产精品免费人成网站| 国产寡妇亲子伦一区二区| 久久久久久久综合色一本| 蜜桃av一区二区| 日韩欧美在线观看一区二区三区| 亚州成人在线电影| 欧美日韩不卡一区| 午夜影院久久久| 欧美日韩国产综合草草| 午夜视黄欧洲亚洲| 在线综合视频播放| 免费观看久久久4p| 精品国产在天天线2019| 国产米奇在线777精品观看| 欧美国产丝袜视频| gogo大胆日本视频一区| 亚洲一区二区在线视频|