标签:byte file when eof 类型 enc 说明 进程id 可变参数
当有多个进程要访问同一个文件的时候,为了防止多进程访问导致的不一致,我们就要考虑进程间的同步问题了。
举例说明:在嵌入式编程中经常会遇到写配置文件的问题,这个时候由于多进程操作就需要跟配置文件加写锁操作。
fcntl是一个非常强大的函数,在这里我们可以使用它来给文件的某一个部分上锁。先来看一下它的声明:
int fcntl(int filedes, int cmd, ... /* struct flock *flockptr */ );
这是一个拥有可变参数的函数声明,filedes自然是要操作的文件描述符,对与记录锁相关的操作,cmd只能是F_GETLK, F_SETLK, 或者 F_SETLKW,而第三个参数则必须是一个指向flock结构体的指针,来看一下该结构体的内部结构:
1 struct flock {
2 short l_type;/*F_RDLCK, F_WRLCK, or F_UNLCK */
3 off_t l_start;/*offset in bytes, relative to l_whence */
4 short l_whence;/*SEEK_SET, SEEK_CUR, or SEEK_END */
5 off_t l_len;/*length, in bytes; 0 means lock to EOF */
6 pid_t l_pid;/*returned with F_GETLK */
7 };
1 int LockOrUnlock(int fd, bool lock) {
2 errno = 0;
3 struct ::flock file_lock_info;
4 std::memset(&file_lock_info, 0, sizeof(file_lock_info));
5 file_lock_info.l_type = (lock ? F_WRLCK : F_UNLCK);
6 file_lock_info.l_whence = SEEK_SET;
7 file_lock_info.l_start = 0;
8 file_lock_info.l_len = 0; // Lock/unlock entire file.
9 return ::fcntl(fd, F_SETLK, &file_lock_info);
10 }
标签:byte file when eof 类型 enc 说明 进程id 可变参数
原文地址:https://www.cnblogs.com/kex1n/p/13055518.html