Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
СП_УМК 2012 каз для 5В070400.doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
1.4 Mб
Скачать

9.1 Файлдарды бұғаттау

Win32 файлдарды түгелімен немесе жартылай бұғаттай алады. Бұл дегеніміз ешқандай өзге процесс (орындалып жатқан программа) файлдың бұғатталған облысына қатынай алмайды. Бұғатталған файл тек оқу үшін (біріккен қатынау) немесе оқу және жазу үшін (монопольді қатынау) ашыла алады. Айта кетер жайт, бұғаттау үрдіспен байланысты. Кез келген файлдың бұғатталған бөлігіне қатынау әрекеті (ReadFile және WriteFile көмегімен) жеңіліске ұшырайды, себебі бұғаттау әруақытта үрдіс деңгейінде болады. Кез келген конфликттелген бұғаттауды алу әрекеті де үрдіс бұғатталған болса жеңіліске ұшырайды. Файлдардың бұғатталуы- параллельді үрдістер мен ағындардың синхрондаулануының шектелген формасы.

Бұғаттаудың кең таралған функциясы LockFileEx тек Windows2000/NT версиясында ғана таралған. Ал LockFile Windows9x- та да қолданыла алады.

LockFileEx- кеңейтілген енгізу- шығару класс функциясына жатады, 64 разрядты позициялы файлдарды және бұғатталған облыстардың өлшемін көрсету үшін ReadFile және WriteFile функциясының позицияларын көрсету үшін қолданылып кеткен жабу құрылымы талап етіледі.

BOOL LockFileEx (HANDLE hFile, DWORD dwFlags, DWORD dwReserved, DWORD nNumberOfBytesToLockLow, DWORD nNumberOfBytesToLockHigh, LPOVERLAPPED lpOvaelapped)

LockFileEx функциясы біріккен (бірнеше оқу үрдістері) немесе монопольді (бір оқу және жазу үрдісі) қатынау үшін ашық файлдарда байттардың облысын бұғаттайды.

Параметрлері

hFile - ашық файл дескрипторы. Дескриптор қатынау құқықтары GENERIC_Read немесе GENERIC_Read және GENERIC_Write иемденуі керек.

dwFlags бұғаттау режимін анықтайды және бұғаттау болғанша күту керек пе екендігін орнатады.

  • LOCKFILE_EXCLUSIVE_LOCK монопольді бұғаттауға оқу/жазу әрекеттерімен сұранысты білдіреді. Егер бұл жалауша орналастырылмаған болса, біріккен бұғаттау (оқу мүмкіндігімен бірге) сұралады.

  • LOCKFILE_FAIL_IMMEDIATELY функцияның тез арада FALSE мәнін қайтарып, тоқтатылуын көрсетеді, егер бұғаттауды орналастыру мүмкін болмаса. Егер бұл жалауша орналастырылмаған болса, файл бұғатталуы мүмкін болғанша функцияны шақыру бұғатталады.

dwReserved нөлге тең болуы керек. Келесі екі параметр байт облысының ұзындығын береді.

lpOvaelapped байттар облысының басын көрсететін OVERLAPPED типінің құрылымын көрсетеді. OVERLAPPED құрылымы мәліметтердің үш компонентін сақтайды, олар беріліп кетуі керек: алғашқы екеуі бұғатталатын облыстың бастапқы позициясын анықтайды.

  • DWORD offset.

  • DWORD OffsetHigh.

  • HANDLE hEvent- нөлге тең болуы керек.

Файлдардың бұғатталуы UnlockFileEx функциясының көмегімен шешіледі. Мұнда dwFlags- тан басқа өлшемдердің барлығы көрсетіледі.

BOOL UnlockFileEx (HANDLE hFile, DWORD dwReserved, DWORD nNumberOfBytesToLockLow, DWORD nNumberOfBytesToLockHigh, LPOVERLAPPED lpOvaelapped)

Файлдардың бұғатталуы кезінде бірнеше факторларды ескеру керек:

  • Бұғаттауды алап тастау алдыңғы бұғаттау сияқты тура сол облысқа тиесілі болуы керек. Мысалы: екі алғашында бұғатталған облыстарды немесе бұғатталған облысттың бөлігінің бұғатын алып тастау жіберілмейді. Берілген бұғаттауға сай келмейтін бұғаттауды алып тастау әрекеті жеңіліске ұшырайды, фуекция FALSE мәнін қайтарып, жүйелік хабарлама бұғаттаудың жоқ екенін көрсетеді.

  • Егер конфликт пайда болатын болса, бұғаттаулар алдын- ала бұғатталған файл облыстарымен қиылыса алмайды. Файл аумағынан шығатын облыстарды бұғаттауға рұқсат бар. Үрдіс немесе ағын файлды кеңейткенде бұл жол пайдалы болуы мүмкін.

  • Бұғаттаулар қайта құрылатын үрдіспен мұраланбайды.

9.1 кестеде бүкіл облыстың немесе оның бөлігінің бұғатталған бұғаттау логикасы көрсетілген. Бұл логика алдыңғы бұғаттаудың осы үрдіске жататын кезінде де іске асады.

9.1 кесте. Бұғаттау талабының логикасы.

Талап етілген бұғаттаудың типі

Бар болатын бұғаттау

Біріккен бұғаттау

Монопольді бұғаттау

Жоқ

Ұсынылады

Ұсынылады

Біріккен (бір немесе бірнеше)

Ұсынылады

Ұсынылады

Ерекшелінген

Ұсынылмайды

Ұсынылмайды

9.2 кестеде үрдістің оқу немесе жазуды файлдың бүкіл немесе жарты облысында бірнеше бұғаттаулармен орындау әрекеті көрсетілген. Сәтсіз оқылу немесе жазылу жартылай аяқталған операциялардың формасын қабылдауы мүмкін, егер жазбаның тек бөлігі бұғатталған болса.

9.2 кесте. Бұғаттаулар және енгізі- шығару операциялары

Бар болатын бұғаттау

Енгізу- шығару операциясы.

Оқу

Жазу

Жоқ

Сәтті өтеді

Сәтті өтеді

Біріккен (бір немесе бірнеше)

Сәтті өтеді. Шақырылатын үрдіс әр уақытта бұғаттауға ие болу міндетті емес.

Сәтсіздік

Ерекшелінген

Сәтті өтеді, егер шақырылатын үрдіс бұғаттауды басқаратын болса. Кері жағдайда- сәтсіздік.

Сәтті өтеді, егер шақырылатын үрдіс бұғаттауды басқаратын болса. Кері жағдайда - сәтсіздік.

Оқу және жазу операциялары әдетте ReadFile және WriteFile функцияларының формаларын немесе олардың кеңейтілген версияларын ReadFileEx және WriteFileEx қабылдайды. Оқу және жазудың сәтсіздігін диагностикалау үшін GetLastError шақырылды.

Енгізу - шығарудың тағы бір формасы - файл бейнеленетін жадыға қатынау, мұнда Файлға қатынау кезінде бұғаттау конфликттері анықталмайды. Олар MapViewOffile функциясы шақырылғанда пайда болады. Бұл функция файл бөлігін үрдіс үшін қол жеткізерлік болып жасайды, сондықтан осы сәтте бұғаттауды тексеру керек.

LockFile - бұғаттау функциясының шектелген арнайы түрі. Ол ұсыну бұғатталуын (advisory locking) қамтамасыз етеді. Бұл жағдайда тек монопольді қатынауды ұсынады және функция басқаруды тез арада қайтарады. Басқаша айтқанда, LockFile бұғатталмайды. Бұғаттаудың орнатылғанын қайтаратын мәні арқылы тексеруге болады.

Файл бұғаттауын алып- тастау.

LockFileEx- тің әр шақырылуында, оған сәйкес бір қаратпа UnLockFileEx еру керек (бұл ереже LockFile және UnLockFile- ға да таралған). Егер программа бұғаттауды алып тастай алмаса немесе оны ұзақ ұстап тұрса, өзге бағдарламалар жұмысын жалғастыра алмайды немесе олардың тез әрекет етуіне кері әсер етеді. Бұғаттау тезірек алынып тасталуы үшін, программалар жақсы жобаланып, реализацияланған болуы керек, бұғаттау операциясын айналып өтетін логиканы болдырмау керек.

Бұған көз жеткізудің ыңғайлы әдісін аяқтау өңдеушісі ұсынады.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]