//使用fcntl对文件进行加锁
#include "stdio.h"
#include "unistd.h"
#include "fcntl.h"
#include "unistd.h"
#include "fcntl.h"
int main()
{
int fd;
struct flock lk;
int r;
fd=open("a.txt", O_RDWR);
if (fd==-1)
{
fd=open("a.txt", O_RDWR|O_CREAT|O_EXCL, 0666);
if (fd==-1)
{
perror("File Open Error");
exit(2);
}
}
lk.l_type=F_WRLCK;
lk.l_whence=SEEK_SET;
lk.l_start=5;
lk.l_len=10;
r=fcntl(fd, F_SETLK, &lk); //lk在这里是传入参数
if (r==0)
{
printf("Lock Sussess!\n");
}
else
{
printf("Lock Failed!\n");
}
while (1); //不能让程序退出
return 0;
}
//使用fcntl读取文件锁
#include "stdio.h"
#include "unistd.h"
#include "fcntl.h"
int main()
{
int fd;
struct flock lk={0};
int r;
fd=open("a.txt", O_RDWR);
if (fd==-1)
{
{
int fd;
struct flock lk={0};
int r;
fd=open("a.txt", O_RDWR);
if (fd==-1)
{
perror("Error");
exit(0);
}
r=fcntl(fd, F_GETLK, &lk); //lk在这里是传出参数
if (r==0)
{
printf("Get Lock Success!\n");
}
if (lk.l_type==F_WRLCK)
{
printf("Write Lock!\n");
}
printf("start:%d, len:%d\n", lk.l_start, lk.l_len);
return 0;
}
exit(0);
}
r=fcntl(fd, F_GETLK, &lk); //lk在这里是传出参数
if (r==0)
{
printf("Get Lock Success!\n");
}
if (lk.l_type==F_WRLCK)
{
printf("Write Lock!\n");
}
printf("start:%d, len:%d\n", lk.l_start, lk.l_len);
return 0;
}