1 / 9 / 0
Регистрация: 03.02.2015
Сообщений: 134

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

15.06.2020, 03:44. Показов 1646. Ответов 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 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать контроль заполнения реквизита "ПричинаСписания". . .
wmic не является внутренней или внешней командой
Maks 02.04.2026
Решение: DISM / Online / Add-Capability / CapabilityName:WMIC~~~~ Отсюда: https:/ / winitpro. ru/ index. php/ 2025/ 02/ 14/ komanda-wmic-ne-naydena/
Программная установка даты и запрет ее изменения
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: при создании документов установить период списания автоматически. . .
Вывод данных в справочнике через динамический список
Maks 01.04.2026
Реализация из решения ниже выполнена на примере нетипового справочника "Спецтехника" разработанного в конфигурации КА2. Задача: вывести данные из ТЧ нетипового документа. . .
Программное заполнения текстового поля в реквизите формы документа
Maks 01.04.2026
Алгоритм из решения ниже реализован на нетиповом документе "ВыдачаОборудованияНаСпецтехнику" разработанного в конфигурации КА2, в дополнении к предыдущему решению. На форме документа создается. . .
К слову об оптимизации
kumehtar 01.04.2026
Вспоминаю начало 2000-х, университет, когда я писал на Delphi. Тогда среди программистов на форумах активно обсуждали аккуратную работу с памятью: нужно было следить за переменными, вовремя. . .
Идея фильтра интернета (сервер = слой+фильтр).
Hrethgir 31.03.2026
Суть идеи заключается в том, чтобы запустить свой сервер, о чём я если честно мечтал давно и давно приобрёл книгу как это сделать. Но не было причин его запускать. Очумелые учёные напечатали на. . .
Модель здравосоХранения 6. ESG-повестка и устойчивое развитие; углублённый анализ кадрового бренда
anaschu 31.03.2026
В прикрепленном документе раздумья о том, как можно поменять модель в будущем
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru