文件锁的函数

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;
}

fcntl和flock类似

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/ZZHinclude/article/details/119867254