为什么OSX上的进程会阻塞fcntl(fd,F_SETLKW,...)?

时间:2015-04-03 10:27:40

标签: c macos sqlite file-locking fcntl

SQLite的一个新实验性功能在一个点使用阻塞posix锁。我有一个测试用例,在OSX上的这个fcntl()调用中阻塞了一个进程,但是我看不出原因。同样的测试适用于Linux,但这可能只是幸运时间。

电话是:

fcntl(fd, F_SETLKW, &f);

其中“f”是:

$1 = {
  l_start = 120,
  l_len = 1,
  l_pid = 0,
  l_type = 3,
  l_whence = 0
}

根据[lsof],我的进程是唯一一个打开文件的进程:

bash-3.2$ sudo lsof test.db-shm
COMMAND     PID USER   FD   TYPE DEVICE SIZE/OFF      NODE NAME
testfixtu 21393  dan   10u   REG   14,2    32768 228781731 test.db-shm

首次调用fcntl()时,某些其他进程可能存在冲突锁定。

gdb显示传递给fcntl()的文件描述符是“10”,所以我认为它是有效的。

所以我的问题是,如果没有其他进程打开文件,为什么fcntl()会被阻塞?

0 个答案:

没有答案