The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  майллист  вход/выход  слежка  RSS
"Не устанавливается блокировка F_WRLCK fnctl(F_SETLK)"
Вариант для распечатки  
Пред. тема | След. тема 
Форумы Программирование под UNIX (Public)
Изначальное сообщение [Проследить за развитием треда]

"Не устанавливается блокировка F_WRLCK fnctl(F_SETLK)"  
Сообщение от devcoder email(??) on 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);
}


Высказать мнение | Ответить | Правка | Cообщить модератору

 Оглавление

Сообщения по теме [Сортировка по времени | RSS]


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

Архив | Удалить

Индекс форумов | Темы | Пред. тема | След. тема
Оцените тред (1=ужас, 5=супер)? [ 1 | 2 | 3 | 4 | 5 ] [Рекомендовать для помещения в FAQ]




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2025 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру