powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Как при открытии файла указать способ блокировки?
12 сообщений из 12, страница 1 из 1
Как при открытии файла указать способ блокировки?
    #39622115
AlekseySQL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
В книге Прохоренка Н.А. "Программирование на С++" на стр.427 для потоков ввода вывода std::ofstream, std::ifstream, std::fstream указана возможность задать способ блокировки открытых файлов.

Но, работая под Linux (в Qt Creator) с этими объектами, система говорит мне, что у конструкторов и метода open() подобного параметра нет.

А ведь параметр очень полезный! Как установить нужный уровень блокировки?
...
Рейтинг: 0 / 0
Как при открытии файла указать способ блокировки?
    #39622123
Ролг Хупин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AlekseySQLВ книге Прохоренка Н.А. "Программирование на С++" на стр.427 для потоков ввода вывода std::ofstream, std::ifstream, std::fstream указана возможность задать способ блокировки открытых файлов.

Но, работая под Linux (в Qt Creator) с этими объектами, система говорит мне, что у конструкторов и метода open() подобного параметра нет.

А ведь параметр очень полезный! Как установить нужный уровень блокировки?

и какие методы автор описывает? а то у меня именно эта страница вырвана
...
Рейтинг: 0 / 0
Как при открытии файла указать способ блокировки?
    #39622125
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AlekseySQL,
Код: plaintext
1.
2.
3.
4.
5.
#include <stdio.h>
#include <share.h>
...
const char myfile[] = "~/test.txt";
auto hMyFile = _fsopen(myfile, "w", SH_DENYWR);
...
Рейтинг: 0 / 0
Как при открытии файла указать способ блокировки?
    #39622134
AlekseySQL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ролг Хупини какие методы автор описывает? а то у меня именно эта страница вырвана

Повторюсь: у конструкторов std::ofstream, std::ifstream, std::fstream и метода open() Прохоренок приводит дополнительный параметр, задающий способ блокировки.

Код: plaintext
1.
2.
3.
4.
5.
#include <stdio.h>
#include <share.h>
...
const char myfile[] = "~/test.txt";
auto hMyFile = _fsopen(myfile, "w", SH_DENYWR);



Это уже не С++. Кстати, а почему в своей чудо- книжке Прохоренок говорит, что желательно не пользоваться системой ввода/вывода С? Какой в ней изъян?
...
Рейтинг: 0 / 0
Как при открытии файла указать способ блокировки?
    #39622142
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Это отсебятина от MS работает только в MSVC.

https://msdn.microsoft.com/ru-ru/library/k7hz8258.aspx#basic_ifstream__open void open(
const wchar_t* _Filename,
ios_base::openmode _Mode = ios_base::in,
int _Prot = (int)ios_base::_Openprot);
...
_Prot
The default file opening protection, equivalent to the shflag parameter in _fsopen, _wfsopen.
...
Рейтинг: 0 / 0
Как при открытии файла указать способ блокировки?
    #39622147
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мой склероз нашёптывает, что хрюниксах вообще непросто с блокировками ...

P.S. Какая может быть блокировка записи, если в любой момент можно делать unlink файлу, на которые есть права???
...
Рейтинг: 0 / 0
Как при открытии файла указать способ блокировки?
    #39622170
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TЭто отсебятина от MS работает только в MSVC.
Мой склероз также нашептывает, что у sopen этот параметр черти с каких годов

Поискал в google, он уже с DOS 3, плюс встречается в коде open-watcom-v2

Также поискал в google с учетом слова Unix... Вполне встречается в книжках по POSIX, QNX etc...
...
Рейтинг: 0 / 0
Как при открытии файла указать способ блокировки?
    #39622195
AlekseySQL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Я правильно понимаю, что с помощью потоков С++ файл открывается так, что любой поток может туда что-то писать (т.е. без блокировки)?

И как следствие при всех последующих операциях должна выполняться дополнительная синхронизация по потокам (чтобы при закрытии одним потоком, второй ничего не писал или чтобы два потока не писали одновременно...). Другими словами это понижает скорость всех операций ввода/вывода. Верно?
...
Рейтинг: 0 / 0
Как при открытии файла указать способ блокировки?
    #39622208
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AlekseySQLВерно?У вас, как я посмотрю, талант, делать неверные выводы ...
Режимы блокировки существенны тогда, когда предполагается, например, что у файла будет не более одного читателя.

P.S. Вам, вроде, уже советовали упорядочить работу с файловой системой в отдельном потоке?
...
Рейтинг: 0 / 0
Как при открытии файла указать способ блокировки?
    #39622217
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AlekseySQLВ книге Прохоренка Н.А. "Программирование на С++" на стр.427 для потоков ввода вывода std::ofstream, std::ifstream, std::fstream указана возможность задать способ блокировки открытых файлов.

Но, работая под Linux (в Qt Creator) с этими объектами, система говорит мне, что у конструкторов и метода open() подобного параметра нет.

А ведь параметр очень полезный! Как установить нужный уровень блокировки?

Возможность блокировать открытый файл в стандартной библиотеке С до 17 (кажется) года отсутствовала.
Существовали только нестандартные расширения (флаги) для указания блокировки открываемых файлов.
Только в 17-ом она была добавлена в стандарт С.
В С++ ещё не успели.
...
Рейтинг: 0 / 0
Как при открытии файла указать способ блокировки?
    #39623006
AlekseySQL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
MasterZivВозможность блокировать открытый файл в стандартной библиотеке С до 17 (кажется) года отсутствовала.
Существовали только нестандартные расширения (флаги) для указания блокировки открываемых файлов.
Только в 17-ом она была добавлена в стандарт С.
В С++ ещё не успели.

Спасибо, я правильно понимаю, что сейчас файл открывается без какой- либо блокировки? Т.е. другой поток также может открыть этот файл и что-то параллельно читать/писать.
...
Рейтинг: 0 / 0
Как при открытии файла указать способ блокировки?
    #39623181
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AlekseySQLСпасибо, я правильно понимаю, что сейчас файл открывается без какой- либо блокировки? Т.е. другой поток также может открыть этот файл и что-то параллельно читать/писать.

Твой файл в твоей программе открывается так, как ты написал. Я не могу сказать, открывается ли он с или без блокировок.

Если ты имеешь в виду, как открывается файл, если ты его открываешь через STD filestream, то да, он по умолчанию открывается без защиты от открытия его другими приложениями. Но это можно переделать, задействовав нестандартные расширения библиотек С и С++ от конкретного компилятора. Если ты этого не делаешь, то скорее всего файл может быть разделяемым во время работы с ним твоего приложения.
...
Рейтинг: 0 / 0
12 сообщений из 12, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / Как при открытии файла указать способ блокировки?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]