簡體   English   中英

如何檢查文件是否被鎖定?

[英]How to check if a file is locked or not?

我有以下代碼,我想檢查文件是否被鎖定。 如果沒有,那么我想寫信給它。 我通過在兩個終端上同時運行它來運行此代碼但是我每次都在兩個選項卡中都處於“鎖定”狀態,即使我沒有鎖定它。 代碼如下:

#include <fcntl.h>
#include <stdio.h>
#include <unistd.h>

int main()
{
    struct flock fl,fl2;
    int fd;

    fl.l_type   = F_WRLCK;  /* read/write lock */
    fl.l_whence = SEEK_SET; /* beginning of file */
    fl.l_start  = 0;        /* offset from l_whence */
    fl.l_len    = 0;        /* length, 0 = to EOF */
    fl.l_pid    = getpid(); /* PID */

    fd = open("locked_file", O_RDWR | O_EXCL | O_CREAT);
    fcntl(fd, F_GETLK, &fl2);
    if(fl2.l_type!=F_UNLCK)
    {
        printf("locked");
    }
    else
    {
        fcntl(fd, F_SETLKW, &fl); /* set lock */
        write(fd,"hello",5);
        usleep(10000000);
    }
    printf("\n release lock \n");

    fl.l_type   = F_UNLCK;
    fcntl(fd, F_SETLK, &fl); /* unset lock */
}

很簡單,只需用F_GETLK而不是F_SETLK運行fnctl。 這將把指針上的數據設置為鎖的當前狀態,你可以通過訪問l_type屬性來查找它是否被鎖定。

有關詳細信息,請參閱: http//linux.die.net/man/2/fcntl

你還需要fl2memset為0.否則當你在失敗時使用fcntl(fd, F_GETLK, &fl2)perror時,你會在終端上看到一條消息:

fcntl:無效的爭論

我建議您在調試系統調用時使用perror

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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