要锁定整个文件,请将偏移量设置为零并将大小设置为零。
可以使用多种方法在文件上设置锁定。方法的选择取决于锁定如何与程序的其余部分进行交互、性能以及可移植性。本示例使用 POSIX 标准兼容的 fcntl(2) 接口。此接口尝试锁定文件,直到发生以下情况之一:
成功设置文件锁定。
出现错误。
超过 MAX_TRY,程序停止尝试锁定文件。
#include <fcntl.h> ... struct flock lck; ... lck.l_type = F_WRLCK; /* setting a write lock */ lck.l_whence = 0; /* offset l_start from beginning of file */ lck.l_start = (off_t)0; lck.l_len = (off_t)0; /* until the end of the file */ if (fcntl(fd, F_SETLK, &lck) <0) { if (errno == EAGAIN || errno == EACCES) { (void) fprintf(stderr, "File busy try again later!\n"); return; } perror("fcntl"); exit (2); } ...
使用 fcntl(2),可以通过设置结构变量来设置锁定请求的类型和起始位置。
不能使用 flock(3UCB) 锁定映射文件。但是,可以针对映射文件使用面向多线程的同步机制。可以在 POSIX 风格和 Solaris 风格下使用这些同步机制。