URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID9
Нить номер: 6902
[ Назад ]

Исходное сообщение
"Не устанавливается блокировка F_WRLCK fnctl(F_SETLK)"

Отправлено devcoder , 01-Ноя-07 14:55 
Ядро linux 2.6.18

Собственно subj.

Собираю тестовое приложение lock:

cc -Wall lock.c -o lock

Создаю тестовый файл:

echo "TEST" > testfile

C 2-х терминалов запускаю:

./lock testfile

Удивительно, но оба процесса ставят исключительную блокировку по записи на весь файл,
хотя по теории может только один. Что не так?

Пример кода приложения lock.


/*
* lock.c
* cc -Wall lock.c -o lock
*/
#include <fcntl.h>
#include <stdio.h>
#include <stdlib.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <unistd.h>

int
main (int argc, char * argv[])
{
   int j;
   int fd;
   char buffer[2];
   struct flock lock;
  
   for (j=1; j < argc; j++) {
      fd = open(argv[j], O_WRONLY, 0644);
      if (fd < 0) {
         fprintf (stderr, "Невозможно открыть %s\n", argv[j]);
         exit(EXIT_FAILURE);
      }

      lock.l_type = F_WRLCK;
      lock.l_whence = SEEK_SET;
      lock.l_start = 0;
      lock.l_len = 0;
      lock.l_pid = 0;
      if (fcntl (fd, F_SETLK, & lock) < 0) {
         fprintf (stderr, "Невозможно заблокировать %s\n", argv[j]);
         exit(EXIT_FAILURE);
      }
   } // for
   fprintf (stdout, "Нажмите Ввод для снятия блокировки(ок)\n");
   fgets (buffer, 2, stdin);
   exit(EXIT_SUCCESS);
}



Содержание

Сообщения в этом обсуждении
"Не устанавливается блокировка F_WRLCK fnctl(F_SETLK)"
Отправлено devcoder , 01-Ноя-07 18:18 
Простите за беспокойство, вопрос снят, обычная невнимательность.