Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

OpenFile


R4D][ ©   (2003-07-07 12:01:00) 

Насколько я знаю, большинство OPEN функций используются для межпроцессной связи(пример: OpenMutex, OpenFileMapping etc). Но какой смысл функции OpenFile если в ее параметрах нет hProccess??? То есть в системе могут быть открыты 10 фаилов с одним и тем ж именем, поэтому по имени нельзя однозначно идентифицировать объект ядра. Я хочу спросить openfile имеет смысл только для "своего" процесса?


R4D][   (2003-07-09 18:24:00) [1]

DuplicateHandle - это, конечно, хорошо, но проблемы с OpenFile не решает. Из того, что ты сказал - OpenFile - не ОТКРЫВАЕТ(увеличивает счетчик и возвращает хэндл), а СОЗДАЕТ(создает новый объект ядра, увеличивает у него счетчик и возвращает хэндл) новый объект ядра. Мне не верится :) подтвердите кто-нибудь еще для верности.


Verg   (2003-07-09 14:38:00) [2]


> Хорошо, возьмем пример - я открываю фаил(CreateFile), далее
> в своей программе использую OpenFile для "открытия" ранее
> открытого фаила(увеличивую счетчик у старого объекта ядра,
> созданного createfile"ом) - существует ли гарантия того,


Имя файла - это не имя объекта ядра. Поэтому применив OpenFile ты создаешь просто еще один объект ядра - хэндл файла. Поэтому никакого увеличения счетчика у "старого" не будет. Для этого, по-моему, надо применить DuplicateHandle к старому хэндлу. Точно не помню.


R4D][   (2003-07-09 13:28:00) [3]

Хорошо, возьмем пример - я открываю фаил(CreateFile), далее в своей программе использую OpenFile для "открытия" ранее открытого фаила(увеличивую счетчик у старого объекта ядра, созданного createfile"ом) - существует ли гарантия того, что я получу хэндл именно нужного мне фаила. Представим, что приложение "Блокнот" открыло этот же фаил между вызовами createfile и openfile(или до вызова createfile).


MBo   (2003-07-08 13:43:00) [4]

Все равно, никакие Open-функции не требуют и не нуждаются ни в дескрипторах, ни в идентификаторах процесса, достаточно имени.


R4D][   (2003-07-08 13:35:00) [5]

Ну на самом деле я это и имел в виду, просто опечатался :)


MBo   (2003-07-08 06:12:00) [6]

>hProcess - это индификатор процесса
Нет, ты путаешь ID процесса (уникальный) и его дескриптор, хэндл, который в каждом процессе разный


R4D][   (2003-07-07 18:30:00) [7]

hProcess - это индификатор процесса.
А то, что у OpenFileMapping нет hProcess - это значит, что в системе может быть только один объект ядра FileMapping и идентифицируется он по имени lpName, которое однозначно определяет объект. Загвоздка-то в том, что в системе может быть открыто, например, 10 фаилов с именем "C:\1.txt", поэтому имя фаила однозначно не идентифицирует объект.


Игорь Шевченко   (2003-07-07 15:50:00) [8]

У OpenFileMapping тоже нет hProcess - и что ? :) Сдается мне, что ни у одной из Open-функций hProcess нету...


Cobalt   (2003-07-07 15:45:00) [9]

>R4D][ (07.07.03 12:01)
В общем случае - Да, только для своего процесса.
Понимаешь ли, тут такая вещь - ведь имя-то у файла на самом деле вместе с путем к нему - то есть, в общем же случае - уникально.

>какой смысл функции OpenFile если в ее параметрах нет hProccess???
вот эту фразу поясни, плиз. что за "hProccess?!!!"


R4D][   (2003-07-07 13:29:00) [10]

А далее указана причина почему - "In particular, the OpenFile function cannot open a named pipe". Но фаилы-то она открывает...


MBo   (2003-07-07 12:03:00) [11]

This function is provided for compatibility with 16-bit versions of Windows
Win32-based applications should use the CreateFile function.


Наверх

Титульная страница Поиск, карта сайта Написать письмо