Skip to end of metadata
Go to start of metadata

You are viewing an old version of this page. View the current version.

Compare with Current View Page History

« Previous Version 2 Next »

Unable to render {include} The included page could not be found.
Unable to render {include} The included page could not be found.

Atomic File Operations Using File Lock

If a file is shared between several tasks in an application, the file lock can be employed to guarantee that a series of file operations are executed atomically. fs_flockfile() (or its non-blocking equivalent fs_ftrylockfile()) acquires the lock for a task (if it does not already own it). Accesses from other tasks will be blocked until fs_funlockfile() is called.

Each file actually has a lock count associated with it. This allows nested calls by a task to acquire a file lock; each of those calls must be matched with a call to fs_funlockfile().

 

void App_Fnct (void)

{

unsigned char data1[50];

unsigned char data2[10];

.

.

.

if (App_FilePtr != (FS_FILE *)0) {

fs_flockfile(App_FilePtr); /* Lock file. */

/* See Note #1. */

/* Wr data atomically. */

fs_fwrite(data1, 1, sizeof(data1), App_FilePtr);

fs_fwrite(data2, 1, sizeof(data1), App_FilePtr);

fs_funlockfile(App_FilePtr); /* Unlock file. */

}

.

.

.

}

    1. Example file lock usage
      1. fs_flockfile() will block the calling task until the file is available. If the task must write to the file only if no other task is currently accessing it, the non-blocking function fs_funlockfile() can be used.
  • No labels