next up previous contents
Next: Структура flock Up: Блокировка файлов Previous: Блокировка файлов   Contents

Необходимость блокировки

Одной из проблем при организации параллельного доступа к файлам из нескольких процессов является непредсказуемость порядка доступа. В следующем примере два процесса записывают в файл строку символов по одному символу за операцию:

#include <stdio.h>

#include <fcntl.h>

#include <sys/types.h>

#include <sys/stat.h>

 

int main()

{

  int fd;

  int x,y;

  pid_t pid;

  unlink("/tmp/file"); /*Удаляем предыдущий файл*/

  fd=open("/tmp/file", O_WRONLY|O_CREAT, 0777);

  if(fd==-1)

  {

    perror("open : ");

    exit(0);

  }

  if((pid=fork()) == -1)

  {

    perror("fork :");

    exit(0);

  }

  else if(pid)

  { /*Родительский процесс*/

    while(1)

    {

      for(x=0; x<10; x++){

      sleep(1);

      write(fd,(char *)"x",1);

    }

  break;

  }

  else

  { /*Процесс-потомок*/

    while(1)

    {

      for(y=0; y<10; y++){

      sleep(1);

      write(fd,(char *)"X",1);

    }

    break;

  }

return 0;

}

После выполнения этой программы содержимое файла
``/tmp/file'' может выглядеть следующим образом:

XxxXXxxXXxxXXxxXXxx
Для хранения данных было бы предпочтительнее, чтобы каждый процесс записывал свои данные в отдельную часть файла. При этом содержимое файла "/tmp/file" должно быть следующим:

xxxxxxxxxxXXXXXXXXXX
Для разделения данных в файле используется функция:

int fcntl(int fd, int сommand,...

          /*struct flock *flockptr*/);



2004-06-22