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檔案系統 檔案系統是什麼 我的理解,檔案系統類似現實中的檔案管理,條理化的儲存資料。它定義了磁碟上儲存檔案的方法和資料結構。不同的人管理檔案有不同的管理方法,那麼相對於不同的系統格式有...