原因是 Linux 和 FreeBSD 下 flock() 是系统调用,允许 read only 的 fd
进行 LOCK_EX 的文件锁。
而 Solaris 下则只是库函数,调用的是 fcntl() 系统调用,read only 的 fd
执行进行 LOCK_SH 的文件锁。
多说一句,现在的 Firebird 衍生代码都对 flock() 有大量误解误用。
【 在 atppp@MCWY.BBS (紧密团结在KCN周围) 的大作中提到: 】
: fd = open(UTMP_LOCK_FILE, O_RDONLY | O_CREAT, 0600);
: if (fd < 0)
: return -1;
: if (flock(fd, LOCK_EX | LOCK_NB) < 0) {
: 打印 strerror(errno);
: close(fd);
: return -1;
: }
: 打印出来 File Exists。晕~~~~
※ 来源:·BBS 水木清华站 smth.org·[FROM: 61.49.127.*]
FROM 61.49.127.*