マルチプロセスファイル読み書きロック


マルチプロセスファイルの読み書き問題


前言
組み込みシステム開発の過程で、コンフィギュレーションファイルはシステムまたはいくつかの重要なプロセスのいくつかのコンフィギュレーション情報を格納するために使用され、これらのコンフィギュレーションファイルは複数のユーザ状態プログラムによってアクセスされる可能性があるため、マルチスレッド(またはマルチプロセス)が同じコンフィギュレーションファイルを同時に設定することを防止し、低確率のコンフィギュレーションファイルの内容が失われ、コンフィギュレーションファイルにロックをかける必要がある.
≪インスタンス|Instance|emdw≫
#include
#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;
}