linux下C语言中的flock函数用法
//testprocess.c
#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <errno.h>
#include <sys/file.h>
#include <string.h>
int main()
{
int fd;
char path[] = "/data/aidi_slave_s001a/backup/test.txt";
char s[] = "writing......\n";
extern int errno;
fd = open(path, O_WRONLY | O_CREAT | O_APPEND);
if (fd != -1)
{
printf("open file %s .\n", path);
if (flock(fd, LOCK_EX | LOCK_NB) == 0)
{
printf("the file was locked by the process.\n");
if (-1 != write(fd, s, sizeof(s)))
{
printf("sucess %s\n", s);
}
else
{
printf("cannot write the file %s\n", path);
printf("errno:%d\n", errno);
printf("errMsg:%s\n", strerror(errno));
}
}
else
{
printf("the file was locked by other process.Can't write...\n");
printf("errno:%d:", errno);
}
close(fd);
}
else
{
printf("cannot open file %s\n", path);
printf("errno:%d\n", errno);
printf("errMsg:%s", strerror(errno));
}
return 0;
}
//testprocess.c
#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <errno.h>
#include <sys/file.h>
#include <string.h>
//lockfile.c
int main()
{
int fd, i;
char path[] = "/data/aidi_slave_s001a/backup/test.txt";
extern int errno;
fd = open(path, O_WRONLY | O_CREAT);
if (fd != -1)
{
printf("open file %s .\n", path);
printf("please input a number to lock the file.\n");
scanf("%d", &i);
if (flock(fd, LOCK_EX) == 0)
{
printf("the file was locked.\n");
}
else
{
printf("the file was not locked.\n");
}
printf("please input a number to unlock the file.\n");
scanf("%d", &i);
if (flock(fd, LOCK_UN) == 0)
{
printf("the file was unlocked.\n");
}
else
{
printf("the file was not unlocked.\n");
}
close(fd);
}
else
{
printf("cannot open file %s\n", path);
printf("errno:%d\n", errno);
printf("errMsg:%s", strerror(errno));
}
return 0;
}