Форум программистов, компьютерный форум, киберфорум
C/C++: WinAPI
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/8: Рейтинг темы: голосов - 8, средняя оценка - 4.75
быдлокодер
 Аватар для kravam
1724 / 911 / 106
Регистрация: 04.06.2008
Сообщений: 5,705

Необходимо открыть (CreateFile) файл с нужными атрибутами совместного использования (атрибуты внутри)

07.12.2015, 21:42. Показов 1660. Ответов 2
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Друзья! Требования такие:

Один процесс открывает файл открывает файл для чтения/записи и разрешает другим процессам только читать из него
Второй процесс открывает файл только для чтения и разрешает другим процессам только читать из него.
Требования осуществимые, так ведь? Тогда поехали, изначально файла "proba" нет. Сперва запускается один процесс потом второй и такие вот надписи в консолях вижу:



код первого процесса
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <windows.h>
#include <stdio.h>
int main ()
{
 SetConsoleCP(1251);
 SetConsoleOutputCP(1251);
 
  HANDLE hFile;
  DWORD Error;
  char szMessage [100];
  hFile = CreateFile ("proba", GENERIC_READ|GENERIC_WRITE, FILE_SHARE_READ, NULL, OPEN_ALWAYS,FILE_ATTRIBUTE_NORMAL, NULL);
  if (hFile == INVALID_HANDLE_VALUE)
     printf ("файл не открыт\n");   
  Error = GetLastError ();   
  FormatMessage (FORMAT_MESSAGE_FROM_SYSTEM, 0, Error, LANG_SYSTEM_DEFAULT, szMessage, 100, 0);
  printf ("%s\n", szMessage);   
  getchar ();
 
}


код второго процесса
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <windows.h>
#include <stdio.h>
int main ()
{
 SetConsoleCP(1251);
 SetConsoleOutputCP(1251);
 
  HANDLE hFile;
  DWORD Error;
  char szMessage [100];
  hFile = CreateFile ("proba", GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_ALWAYS,FILE_ATTRIBUTE_NORMAL, NULL);
  if (hFile == INVALID_HANDLE_VALUE)
     printf ("файл не открыт\n");   
  Error = GetLastError ();   
  FormatMessage (FORMAT_MESSAGE_FROM_SYSTEM, 0, Error, LANG_SYSTEM_DEFAULT, szMessage, 100, 0);
  printf ("%s\n", szMessage);   
  getchar ();
 
}

Bash
1
Операция успешно завершена.
Bash
1
2
файл не открыт
Процесс не может получить доступ к файлу, так как этот файл занят другим процессом.

Вторая надпись убивает прямо-таки. Я и так знаю, что файл занят другим процессом. Мне его и надо открыть, чтобы он был занят двумя процессами. Совместное использование тык скыть. Спасибо, кто откликнется.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
07.12.2015, 21:42
Ответы с готовыми решениями:

Открыть существующий файл с CreateFile
hFile = CreateFile(L&quot;\\\\.\\C:&quot;, GENERIC_READ, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, 0, 0); Обясните плз, что...

CreateFile - открыть файл, получив имя из командной строки
Здравствуйте! Я только начал программировать на WinAPI, поэтому пока не могу разобраться со следующим вопросом. Мне требуется...

Необходимо открыть файл
Доброго времени суток дамы и господа. Возникла проблема. Есть файл, необходимо открыть. Погуглил немного, не помогло. Файл формата (.mtf) В...

2
653 / 161 / 64
Регистрация: 08.04.2015
Сообщений: 411
08.12.2015, 05:20
Статья в MSDN. Ваш случай - в таблице третий с конца.
0
быдлокодер
 Аватар для kravam
1724 / 911 / 106
Регистрация: 04.06.2008
Сообщений: 5,705
08.12.2015, 08:50  [ТС]
Теперь всё ясно. Алгоритм действий такой. Сперва пишем один вызов функции CreateFile, потом другой вызов. Потом dwDesiredAccess второго вызова приводим в соответствие к dwShareMode первого вызова, а dwDesiredAccess первого вызова к dwShareMode второго вызова. Это всё делается без таблицы. Отсюда, кстати, и фраза в статье:
It does not matter in which order the CreateFile calls are made.
А можно сверяться с таблицей.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
08.12.2015, 08:50
Помогаю со студенческими работами здесь

Необходимо десериализовать XML с атрибутами
У кого есть опыт в десериализации и сериализации XML подскажите в данном вопросе. Есть XML-файл, как его десериализовать и сериализовать в...

Как открыть файл xls без использования OpenFileDialog?
Вечер добрый.Ниже приведен код который открывает файл xls и отображает содержимое в datagridview. Все бы ничего,но где прописать...

У меня есть файл и внутри этого файла есть код, я хочу его открыть в IDLE питон так, чтобы внутри код вывести
У меня есть файл и внутри этого файла есть код, я хочу его открыть в IDLE питоне так, чтобы код можно было выполнить в idle: Файл с таким...

Не получается открыть файл внутри jar
После создания jar не могу открыть из него видео. Картинки для иконок загружаются так: ImageIcon iconFind = new...

Открыть файл Word внутри формы
Возникла такая проблема. Создается некая форма, разделенная на две части. Левая часть используется для навигации (чего - не приницпиально,...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а привычная функция main(). . .
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь(не выше 3-го порядка) постоянного тока с элементами R, L, C, k(ключ), U, E, J. Программа находит переходные токи и напряжения на элементах схемы классическим методом(1 и 2 з-ны. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru