A:可以写, 锁只可以控制能否加锁成功, 不能控制对文件的读写, 所以叫”建议”锁, 我加了锁就是不想让你写, 你非要写我也没办法. vim/gedit不通过能否加锁成功来决定是否读写, 所以可以直接上
Q: So如何实现文件锁控制文件的读写操作????
A:可以在读操作前尝试加读锁, 写操作前尝试加写锁, 根据能否加锁成功决定能否进行读写操作
int fd=open("./a.txt",O_RDWR); //得到fd if(-1==fd) perror("open"),exit(-1); struct flock lock={F_RDLCK,SEEK_SET,2,5,-1}; //设置锁 //此处从第3个byte开始(包含第三)锁5byte int res=fcntl(fd,F_SETLK,&lock); //给fd加锁 if(-1==res) perror("fcntl"),exit(-1); ioct1() //操作特殊文件的设备参数,成功返回0,失败返回-1设errno #include <sys/ioctl.h> int ioctl(int d, int request, ...); //d:an open file descriptor. //request: a device-dependent request code close() //关闭fd,这样这个fd就可以重新用于连接其他文件,成功返回0,失败返回-1设errno #include <unistd.h> int close(int fd); #include <unistd.h> #include<stdlib.h> int res=close(fd); if(-1==res) perror("close"),exit(-1);