簡體   English   中英

Linux / Linux中的文件和F_TLOCK問題

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM