Linux 檔案鎖與 inode

2021-07-02 01:09:54 字數 2157 閱讀 9613

1. 程序 a 排他鎖住某檔案之後,程序 b 可以修改該檔案,但不能鎖住該檔案。

2. 程序 a 排他鎖住某檔案之後,程序 b 修改該檔案之後,因為檔案 inode 沒有改變,所以依然不能鎖住該檔案。

3. 程序 a 排他鎖住某檔案之後,程序 b 可以刪除該檔案,並建立同名檔案,此時程序 b 可以鎖住該檔案。

由於 vi, sed 等程式修改檔案會改變檔案 inode, 所以會導致被 a 程序鎖住的檔案,再用 vi, sed 等修改後依然能被程序 b 鎖住。

下面的例子模擬了上述情景:

#include #include #include #include #include #include #define file_contents "123"

int main()

}if (-1 == fd)

if (-1 == write(fd, file_contents, sizeof(file_contents)))

if (-1 == flock(fd, lock_ex))

sleep(60);

if (-1 == close(fd))

return 0;

}

#include #include #include #include #include #include int main()

printf("try lock!\n");

if (-1 == flock(fd, lock_ex | lock_nb))

if (-1 == close(fd))

return 0;

}

int main()

if (-1 == close(fd))

return 0;

}

#include #include #include #include #include #define file_contents "123"

int main()

printf("create lock.txt!\n");

if (-1 == fd)

if (-1 == write(fd, file_contents, sizeof(file_contents)))

if (-1 == close(fd))

return 0;

}

1. 先單獨執行 locking

2. 按如下順序執行其他程式

#!/bin/sh

./try_lock

ls -i lock.txt

ls -i lock.txt

./try_lock

echo "################# before rm_create"

ls -i lock.txt

./rm_create

echo "################# after rm_create"

ls -i lock.txt

./try_lock

輸出如下:

> ./run.sh 

try_lock*************************===

try lock!

flock() failed.

2172298 lock.txt

2172298 lock.txt

try_lock*************************===

try lock!

flock() failed.

################# before rm_create

2172298 lock.txt

rm_create*************************===

remove lock.txt!

create lock.txt!

################# after rm_create

2172299 lock.txt

try_lock*************************===

try lock!

修改檔案之後,inode 沒有變化,flock 失敗;刪除再建立相同檔案,inode 改變,flock 成功。

Linux 符號鏈結與 inode

stat ln s 原始檔 目標檔案 當我們需要在不同的目錄,用到相同的檔案時,我們不需要在每乙個需要的目錄下都放乙個必須相同的檔案,我們只要在某個固定的目錄,放上該檔案,然後在其它的目錄下用 ln 命令鏈結 link 它就可以,不必重複的占用磁碟空間。例如 ln s bin less usr lo...

Linux 的檔案系統 inode

linux 的檔案系統 inode 看完了上面的說明,您應該對於硬碟有一定程度的認識了!好了,那麼接下來就是要談一談 linux 的檔案系統 filesystem 囉!我們這裡以 linux 最標準的 ext2 這個檔案系統來作為說明。還記得我們在 linux 檔案屬性與目錄配置 那個章節提到的,在...

Linux檔案系統和inode

學到linux上的軟連線和硬鏈結,不得不了解inode,要想知道inode,不得不了解一些檔案系統,至少是linux檔案系統 檔案系統是什麼 我的理解,檔案系統類似現實中的檔案管理,條理化的儲存資料。它定義了磁碟上儲存檔案的方法和資料結構。不同的人管理檔案有不同的管理方法,那麼相對於不同的系統格式有...