[英]Linux/ File in linux and F_TLOCK issue
我讀了一本關於Linux中文件的書,它給出了下一個示例:
int main(char ** argv, int argc) {
int stat;
int fd = open("dugma1.txt", O_WRONLY, 0666);
if (fork() == 0) {
int fd2 = open("dugma1.txt", O_WRONLY, 0666);
sleep(10);
if (lockf(fd2, F_TLOCK, 17) >= 0) {
write(fd2, "I was here second", 17);
}
} //if
else {
lockf(fd, F_TLOCK, 16);
write(fd, "I was here first", 16);
wait(&stat);
}
}
它說輸出將是: I was here first
,原因是:我們沒有關閉文件。 但是我不理解這種外植。 我們首先寫: I was here first
,但是為什么在sleep(10)
我們不去看代碼的這一部分:
if (lockf(fd2, F_TLOCK, 17) >= 0) {
write(fd2, "I was here second", 17);
}
F_TLOCK
是非阻塞的,為此,我們將成功編寫“我在這里第二”。
謝謝
lockf(fd2,F_TLOCK,17)
遇到錯誤(EAGAIN),因此返回-1。 寫入文件所需的值等於或大於0,而不是-1。 測試失敗,並且永遠不會發生寫入。
父級對打開的文件執行lockf(fd, F_TLOCK, 16)
,鎖定前16
個字節。 然后它將文本寫入其中,並等待孩子退出。 它不會關閉文件,因此鎖仍然存在。 如果close(fd);
在write()
之后的父代代碼中,該鎖將被釋放,但沒有釋放。
子級先休眠一段時間,然后嘗試鎖定文件的前17個字節,但這失敗了,因為父級仍具有該鎖定。 這就是為什么lockf(fd2, F_TLOCK, 17)
失敗並顯示EAGAIN
-稍后應重復該操作。 錯誤由返回值-1
表示,該值使子代碼中的條件條件不執行。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.