多进程文件读写问题
前言
在嵌入式系统开发的过程中,配置文件用来存放系统或者一些重要进程的一些配置信息,这些配置文件有可能会被多个用户态程序进行访问,因此,防止多线程(或多进程)同时设置相同配置文件,造成低概率配置文件内容丢失,对配置文件加锁很有必要。
实例
#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;
}