多进程文件读写之加锁

多进程文件读写问题

前言

在嵌入式系统开发的过程中,配置文件用来存放系统或者一些重要进程的一些配置信息,这些配置文件有可能会被多个用户态程序进行访问,因此,防止多线程(或多进程)同时设置相同配置文件,造成低概率配置文件内容丢失,对配置文件加锁很有必要。

实例

#include<sys/file.h>
#define CONFIG_LOCK_PATH “/tmp/file.lock”
#define WIFI_CONFIG_FILENAME “/tmp/wifi_config”
static int busy_config =  0;    //busy_config =1时表示已在处理配置wifi

void lock_config(FILE * fpLock, int *fd, char *path)
{
    int ifd = -1;

    if ((fpLock = fopen(path, “w+”)) != NULL)
    {
        ifd = fileno(fpLock);
        flock(ifd, LOCK_EX);    
        *fd = ifd;
    }
}
void unlock_config(FILE *fpLock, int *fd)
{
    int ifd = *fd;

    if(ifd != -1)
        flock(ifd, LOCK_UN);

    if(fpLock)
        fclose(fpLock);
}
int main()
{
    FILE *fpLock = NULL;
    int fd = -1;

    if(1 == busy_config)
        return ;
    else
        busy_config = 1;

    if (!access(WIFI_CONFIG_FILENAME, 0))  //配置文件是否存在
    {
        //加锁
        lock_config(fpLock, &fd, CONFIG_LOCK_PATH);
        //设置wifi参数
        ……
        //解锁
        unlock_config(fpLock, &fd);
        //生效wifi参数, 本地无线生效可以使用iwpriv命令配置来避免重启wifi
        ……
    }
    busy_config = 0;  //配置完成,把busy_config设置为0
    return0;
}

猜你喜欢

转载自blog.csdn.net/sky619351517/article/details/80715077