1.flock
NAME
flock - apply or remove an advisory lock on an open file
SYNOPSIS
#include <sys/file.h>
int flock(int fd, int operation);
测试demo
#define PROCNUM 20
#define FILENAME "log"
#define LINESIZE 1024
void addFun(void)
{
FILE *fp = fopen(FILENAME,"r+");
char Buf[LINESIZE];
int fd;
if(NULL == fp)
{
perror("fopen()");
exit(1);
}
//转化一个文件描述符
fd = fileno(fp);
//锁住
lockf(fd, F_LOCK, 0);
fgets( Buf, LINESIZE, fp);
fseek(fp, 0, SEEK_SET);
sleep(1);
fprintf(fp, "%d\n", atoi(Buf)+1);
fflush(fp);
//解锁
lockf(fd, F_ULOCK, 0);
fclose(fp);
}
int main()
{
int i, pid;
for(i = 0 ; i < PROCNUM; i++)
{
//创建子进程
pid = fork();
if(pid < 0)
{
perror("fork()");
exit(1);
}
if(0 == pid)
{
addFun();
exit(0);
}
}
for(i = 0; i < PROCNUM; i++)
{
wait(NULL);
}
return 0;
}