Форум программистов, компьютерный форум, киберфорум
C/С++ под Linux
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.57/7: Рейтинг темы: голосов - 7, средняя оценка - 4.57
1 / 9 / 0
Регистрация: 03.02.2015
Сообщений: 134

Блокировка на чтение файла

15.06.2020, 03:44. Показов 1641. Ответов 1
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Допустим, открыт файл
C
1
2
3
4
5
6
7
//Открытие результирующего файла America’s_music_culture
    close(d_amc);
    d_amc = open ("America’s_music_culture", O_RDONLY);
    if (d_amc!=-1)
    cout << "Открытие результирующего файла America’s_music_culture - успешно.\n";
    else if (d_amc==-1)
    cout << "Открытие результирующего файла America’s_music_culture - ошибка.\n";
Делаю блокировку на чтение
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
//Установка блокировки на чтение файла America’s_music_culture
    int y=-1;
    struct flock f;
    f.l_type = F_RDLCK;
    f.l_whence = SEEK_SET;
    f.l_start = 0;
    f.l_len = 0;
    y = fcntl(d_amc, F_SETLK, &f);
    if (y==0)
    {
        cout << "Установка блокировки на чтение файла America’s_music_culture: \n";
        cout << "l_type = " << f.l_type <<"\n";
        cout << "l_whence = " << f.l_whence <<"\n";
        cout << "l_start  = " << f.l_start <<"\n";
        cout << "l_len = " << f.l_len <<"\n";
    }
    else if (y==-1)
    {
        cout << "Ошибка установки блокировки чтения файла America’s_music_culture\n";
    }
Но она не блокирует процесс чтения, чтение производится корректно, почему так?
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
 //Чтение результирующего файла America’s_music_culture
    ssize_t amc_rez;
    char amc_buffer_rez [1324];
    amc_rez = read(d_amc,amc_buffer_rez,1324);
    if (amc_rez==1324)
    cout << "Чтение результирующего файла America’s_music_culture - успешно.";
    if (amc_rez==-1)
    cout << "Чтение результирующего файла America’s_music_culture - ошибка.";
    cout << "\n\n";
    cout << "Содержание результирующего файла America’s_music_culture:\n";
    for (int i=0;i<1324;i++)
    {
        cout << amc_buffer_rez[i];
    }
    cout << "\n\n";
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
15.06.2020, 03:44
Ответы с готовыми решениями:

Блокировка файла на запись/чтение
Здравствуйте. Решаю задачу организации работы двух параллельных процессов с файлом. Для начала, чтобы прочувствовать тему, решил...

Блокировка потоков на запись и чтение в List<>
Написал примерный код в блокноте (схематичный код - на мелочи не обращаем внимание , думаю суть будет понятна всем что мне требуется) ...

Чтение чисел из файла. Чтение после конца потока невозможно
Товарищи, помогите. В Pascal'e я не силен, так что не бейте меня ногами, но есть задача: написать обычную программу для расчета некоторых...

1
Почетный модератор
 Аватар для Humanoid
11559 / 4353 / 453
Регистрация: 12.06.2008
Сообщений: 12,455
15.06.2020, 11:49
Нашёл статью, где есть фраза
Этот пример иллюстрирует возможности сериализации процессов. Тем не менее здесь все равно возможны чтение и запись в процессе-потомке. Такой вариант блокировки называется advisory locking (необязательная блокировка). При его установке не производится никаких дополнительных проверок того, должны ли системные функции open, read и write из-за блокировки запрещаться при вызове. Для advisory locking принимается, что пользователь сам является ответственным за проверку того, существуют ли определенные блокировки или нет. Невозможно запретить всем процессам доступ к файлу. Только процессы, опрашивающие наличие блокировки с помощью fcntl, блокируются при ее наличии (и то не всегда).
Проще говоря, на read()/write() это никак не влияет. Наличие блокировки можно узнать через F_GETLK и самостоятельно принять решение о том, что блокировка установлена. Но когда я попробовал в одном процессе F_WRLCK (с паузой после этого), а в другом F_WRLCKW, то ioctl() выполнился успешно, хотя, я ожидал, что второй процесс должен подвиснуть до тех пор, пока первый не сделает F_UNLCK.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
15.06.2020, 11:49
Помогаю со студенческими работами здесь

Как заменить чтение строки из консоли на чтение текстового файла?
основное задание: найти частоту суффикса (например, &quot;ing&quot;) в текстовом документе. в прикреплённом коде текст вводится прямо в консоль,...

Чтение файла, чтение названия папки где находится файл, запись данных на PHP
Допустим у нас есть структура с папками типа Large -&gt; Vehicles -&gt; Firetruck_0 В этой папке лежит файл формата .dat Что нужно сделать? ...

Чтение заголовка PCX файла и чтение растровых данных PCX файла
Привет форумчане! Столкнулся с такой проблемой. Нужно считать заголовок PCX файла и растровые данные PCX файла. Код написал. Часть...

Чтение бинарного файла - чтение первых 9 байт
Есть код, который читает первые 9 байт бинарного файла(заголовок записи) void ATS44Encoder::FileEncode() { QFile* file = new...

Переделать в коде чтение из файла в чтение с клавиатуры
Переделайте что бы текст считывался с клавиатуры, а не с файла! Буду благодарен за помощь! //файл должен начинаться со слова, между...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Новые блоги и статьи
Перемещение выделенных строк ТЧ из одного документа в другой
Maks 30.03.2026
Реализация из решения ниже выполнена на примере нетипового документа "ВыдачаОборудованияНаСпецтехнику" с единственной табличной частью "ОборудованиеИКомплектующие" разработанного в конфигурации КА2. . . .
Functional First Web Framework Suave
DevAlt 30.03.2026
Sauve. IO Апнулись до NET10. Из зависимостей один пакет, работает одинаково хорошо как в режиме проекта так и в интерактивном режиме. из сложностей - чисто функциональный подход. Решил. . .
Автоматическое создание документа при проведении другого документа
Maks 29.03.2026
Реализация из решения ниже выполнена на нетиповых документах, разработанных в конфигурации КА2. Есть нетиповой документ "ЗаявкаНаРемонтСпецтехники" и нетиповой документ "ПланированиеСпецтехники". В. . .
Настройка движения справочника по регистру сведений
Maks 29.03.2026
Решение ниже реализовано на примере нетипового справочника "ТарифыМобильнойСвязи" разработанного в конфигурации КА2, с целью учета корпоративной мобильной связи в коммерческом предприятии. . . .
Автозаполнение реквизита при выборе элемента справочника
Maks 27.03.2026
Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. При выборе "Спецтехники" (Тип Справочник. Спецтехника), заполняется. . .
Сумматор с применением элементов трёх состояний.
Hrethgir 26.03.2026
Тут. https:/ / fips. ru/ EGD/ ab3c85c8-836d-4866-871b-c2f0c5d77fbc Первый документ красиво выглядит, но без схемы. Это конечно не даёт никаких плюсов автору, но тем не менее. . . всё может быть. . .
Автозаполнение реквизитов при создании документа
Maks 26.03.2026
Программный код из решения ниже размещается в модуле объекта документа, в процедуре "ПриСозданииНаСервере". Алгоритм проверки заполнения реализован для исключения перезаписи значения реквизита,. . .
Команды формы и диалоговое окно
Maks 26.03.2026
1. Команда формы "ЗаполнитьЗапчасти". Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. В качестве источника данных. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru