Π§ΠΈΡ‚Π°ΠΉΡ‚Π΅ ΠΊΠ½ΠΈΠ³ΠΈ ΠΎΠ½Π»Π°ΠΉΠ½ Π½Π° Bookidrom.ru! БСсплатныС ΠΊΠ½ΠΈΠ³ΠΈ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΊΠ»ΠΈΠΊΠ΅

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ «БистСмноС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π² срСдС WindowsΒ». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 24

Автор ДТонсон Π₯Π°Ρ€Ρ‚

/* Π“Π»Π°Π²Π° 3. ΠΊΠΎΠΌΠ°Π½Π΄Π° touch. */

/* touch [ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹] [Ρ„Π°ΠΉΠ»Ρ‹] */

#include "EvryThng.h"


int _tmain(int argc, LPTSTR argv[]) {

 SYSTEMTIME SysTime;

 FILETIME NewFileTime;

 LPFILETIME pAccessTime = NULL, pModifyTime = NULL;

 HANDLE hFile;

 BOOL Flags[MAX_OPTIONS], SetAccessTime, SetModTime, CreateNew;

 DWORD CreateFlag;

 int i, FileIndex;

 FileIndex = Options(argc, argv, _T("amc"), &Flags[0], &Flags[1], &Flags[2], NULL);

 SetAccessTime = !Flags[0];

 SetModTime = !Flags[1];

 CreateNew = !Flags[2];

 CreateFlag = CreateNew ? OPEN_ALWAYS : OPEN_EXISTING;

 for (i = FileIndex; i < argc; i++) {

  hFile = CreateFile(argv[i], GENERIC_READ | GENERIC_WRITE, 0, NULL, CreateFlag, FILE_ATTRIBUTE_NORMAL, NULL);

  GetSystemTime(&SysTime);

  SystemTimeToFileTime(&SysTime, &NewFileTime);

  if (SetAccessTime) pAccessTime = &NewFileTime;

  if (SetModTime) pModifyTime = &NewFileTime;

  SetFileTime(hFile, NULL, pAccessTime, pModifyTime);

  CloseHandle(hFile);

 }

 return 0;

}

Π‘Ρ‚Ρ€Π°Ρ‚Π΅Π³ΠΈΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Ρ„Π°ΠΉΠ»ΠΎΠ²

Π£ΠΆΠ΅ Π½Π° Ρ€Π°Π½Π½ΠΈΡ… стадиях любого ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ прилоТСния ΠΈΠ»ΠΈ ΠΏΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²ΠΊΠΈ Π΅Π³ΠΎ ΠΊ пСрСносу Π½Π° Π΄Ρ€ΡƒΠ³ΡƒΡŽ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡƒ приходится ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Ρ‚ΡŒ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Ρ‚ΠΎΠ³ΠΎ, Π΄ΠΎΠ»ΠΆΠ½Π° Π»ΠΈ ΠΎΡΡƒΡ‰Π΅ΡΡ‚Π²Π»ΡΡ‚ΡŒΡΡ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Ρ„Π°ΠΉΠ»ΠΎΠ² с использованиСм Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ Π‘ ΠΈΠ»ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ Windows. Π₯Π°Ρ€Π°ΠΊΡ‚Π΅Ρ€ этого Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ Π½Π΅ относится ΠΊ ΠΊΠ°Ρ‚Π΅Π³ΠΎΡ€ΠΈΠΈ "ΠΈΠ»ΠΈ-ΠΈΠ»ΠΈ", ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΏΡ€ΠΈ соблюдСнии ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Ρ… ΠΌΠ΅Ρ€ прСдостороТности смСшанноС ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ Π΄Π°ΠΆΠ΅ ΠΏΠΎ ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΡŽ ΠΊ ΠΎΠ΄Π½ΠΎΠΌΡƒ ΠΈ Ρ‚ΠΎΠΌΡƒ ΠΆΠ΅ Ρ„Π°ΠΉΠ»Ρƒ.

Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° Π‘ ΠΎΠ±Π»Π°Π΄Π°Π΅Ρ‚ рядом явных прСимущСств, срСди ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΌΠΎΠΆΠ½ΠΎ Π²Ρ‹Π΄Π΅Π»ΠΈΡ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅:

β€’ ΠŸΠΎΠ»ΡƒΡ‡Π΅Π½Π½Ρ‹ΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹ΠΉ ΠΊΠΎΠ΄ Π»Π΅Π³ΠΊΠΎ пСрСносится Π½Π° Π΄Ρ€ΡƒΠ³ΠΈΠ΅ систСмы.

β€’ ΠΠ°Π»ΠΈΡ‡ΠΈΠ΅ ΡƒΠ΄ΠΎΠ±Π½Ρ‹Ρ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с символами ΠΈ строками, Π½Π΅ ΠΈΠΌΠ΅ΡŽΡ‰ΠΈΡ… прямых Π°Π½Π°Π»ΠΎΠ³ΠΎΠ² срСди Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ Windows, ΡƒΠΏΡ€ΠΎΡ‰Π°Π΅Ρ‚ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ строк.

β€’ Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ Π‘ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ ΠΏΡ€ΠΎΡ‰Π΅ Π² использовании ΠΏΠΎ ΡΡ€Π°Π²Π½Π΅Π½ΠΈΡŽ с функциями Windows.

β€’ Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Π΅ Π½Π° ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ ΡΠΈΠΌΠ²ΠΎΠ»ΡŒΠ½Ρ‹Ρ… строк ΠΈ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ², Π»Π΅Π³ΠΊΠΎ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Ρ‚ΡŒ ΠΊ Ρ„ΠΎΡ€ΠΌΠ΅, Π΄ΠΎΠΏΡƒΡΠΊΠ°ΡŽΡ‰Π΅ΠΉ ΡƒΠΊΠ°Π·Π°Π½ΠΈΠ΅ ΠΎΠ±ΠΎΠ±Ρ‰Π΅Π½Π½Ρ‹Ρ… символов ΠΏΡ€ΠΈ ΠΈΡ… Π²Ρ‹Π·ΠΎΠ²Π΅, хотя прСимущСства пСрСносимости ΠΏΡ€ΠΈ этом Π±ΡƒΠ΄ΡƒΡ‚ утСряны.

β€’ ΠšΠ°ΠΊ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π² Π³Π»Π°Π²Π΅ 7, Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ Π‘ способны Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ ΠΈ Π² срСдах с ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½ΠΎΠΉ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΎΠΉ.

Π’Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅, использованиС Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ Π‘ Π½Π°Π»Π°Π³Π°Π΅Ρ‚ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ограничСния. Π’ ΠΏΠΎΠ»ΡŒΠ·Ρƒ этого утвСрТдСния ΠΌΠΎΠΆΠ½ΠΎ привСсти пСрСчислСнныС Π½ΠΈΠΆΠ΅ сообраТСния: 

β€’ Π‘рСдства Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ Π‘ Π½Π΅ ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΠ²Π°ΡŽΡ‚ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π°ΠΌΠΈ ΠΈ ΠΎΠ±Ρ…ΠΎΠ΄ Π΄Π΅Ρ€Π΅Π²Π° ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ΠΎΠ² ΠΈ Π² Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π΅ случаСв Π½Π΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚ΡŒ ΠΈΠ»ΠΈ ΡƒΡΡ‚Π°Π½Π°Π²Π»ΠΈΠ²Π°Ρ‚ΡŒ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΎΠ² Ρ„Π°ΠΉΠ»ΠΎΠ².

β€’ Π’ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ fseek, входящСй Π² Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ Π‘, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ 32-Π±ΠΈΡ‚ΠΎΠ²Ρ‹Π΅ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΠΈ Ρ„Π°ΠΉΠ»Π°, ΠΈ поэтому, нСсмотря Π½Π° Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ считывания гигантских Ρ„Π°ΠΉΠ»ΠΎΠ², установка ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½ΠΎΠΉ ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΈ Π² Ρ‚Π°ΠΊΠΎΠΌ Ρ„Π°ΠΉΠ»Π΅, ΠΊΠ°ΠΊ это трСбуСтся, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ 3.1, оказываСтся Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΠΉ.

β€’ Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° Π‘ Π½Π΅ прСдоставляСт Ρ‚Π°ΠΊΠΈΠ΅ Ρ€Π°Π·Π²ΠΈΡ‚Ρ‹Π΅ возмоТности, ΠΊΠ°ΠΊ Π·Π°Ρ‰ΠΈΡ‚Π° Ρ„Π°ΠΉΠ»ΠΎΠ², ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Ρ„Π°ΠΉΠ»ΠΎΠ², Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Ρ„Π°ΠΉΠ»ΠΎΠ², асинхронный Π²Π²ΠΎΠ΄/Π²Ρ‹Π²ΠΎΠ΄ ΠΈ взаимодСйствиС ΠΌΠ΅ΠΆΠ΄Ρƒ процСссами. ВмСстС с Ρ‚Π΅ΠΌ, ΠΊΠ°ΠΊ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π² ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ Π’, использованиС Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΈΠ· этих возмоТностСй Π² рядС случаСв ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΠ²Π°Ρ‚ΡŒ сущСствСнноС ΡƒΠ»ΡƒΡ‡ΡˆΠ΅Π½ΠΈΠ΅ ΠΏΠΎΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΉ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ.

ΠΠ»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΌ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ΠΎΠΌ являСтся пСрСнос ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π³ΠΎ UNIX-ΠΊΠΎΠ΄Π° с ΠΏΡ€ΠΈΠ²Π»Π΅Ρ‡Π΅Π½ΠΈΠ΅ΠΌ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ совмСстимости (compatibility library). Microsoft Π‘ прСдоставляСт ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Π½ΡƒΡŽ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ совмСстимости, Π²ΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‰ΡƒΡŽ ΠΌΠ½ΠΎΠ³ΠΈΠ΅, хотя ΠΈ Π΄Π°Π»Π΅ΠΊΠΎ Π½Π΅ всС, Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ UNIX. К числу Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ UNIX, входящих Π² состав Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ Microsoft, относятся Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π²Π²ΠΎΠ΄Π°/Π²Ρ‹Π²ΠΎΠ΄Π°, ΠΎΠ΄Π½Π°ΠΊΠΎ Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ управлСния процСссами, Π½Π΅ говоря ΠΎ ΠΌΠ½ΠΎΠ³ΠΈΡ… Π΄Ρ€ΡƒΠ³ΠΈΡ… функциях, Π² Π½Π΅ΠΉ ΠΎΡ‚ΡΡƒΡ‚ΡΡ‚Π²ΡƒΡŽΡ‚. Π’ ΠΈΠΌΠ΅Π½Π°Ρ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ-Π°Π½Π°Π»ΠΎΠ³ΠΎΠ² присутствуСт прСфикс Π² Π²ΠΈΠ΄Π΅ символа подчСркивания, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, _read, _write, _stat ΠΈ Ρ‚Π°ΠΊ Π΄Π°Π»Π΅Π΅.

РСшСния ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ смСшанного использования Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ Π‘, Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ совмСстимости ΠΈ Win32/64 API Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Ρ‚ΡŒΡΡ Π½Π° основании Ρ‚Ρ€Π΅Π±ΠΎΠ²Π°Π½ΠΈΠΉ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°. МногиС ΠΈΠ· прСимущСств Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ Windows Π±ΡƒΠ΄ΡƒΡ‚ продСмонстрированы Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… Π³Π»Π°Π²Π°Ρ…, Π° для ознакомлСния с количСствСнными Π΄Π°Π½Π½Ρ‹ΠΌΠΈ, Ρ…Π°Ρ€Π°ΠΊΡ‚Π΅Ρ€ΠΈΠ·ΡƒΡŽΡ‰ΠΈΠΌΠΈ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ пригодятся Π²Π°ΠΌ Π² Ρ‚Π΅Ρ… случаях, ΠΊΠΎΠ³Π΄Π° этот Ρ„Π°ΠΊΡ‚ΠΎΡ€ становится Ρ€Π΅ΡˆΠ°ΡŽΡ‰ΠΈΠΌ, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚ΡŒΡΡ ΠΊ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡŽ Π’.

Π‘Π»ΠΎΠΊΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Ρ„Π°ΠΉΠ»ΠΎΠ²

Π’ систСмах, Π΄ΠΎΠΏΡƒΡΠΊΠ°ΡŽΡ‰ΠΈΡ… ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠ΅ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… процСссов, ΠΎΡΠΎΠ±ΡƒΡŽ Π°ΠΊΡ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ ΠΏΡ€ΠΈΠΎΠ±Ρ€Π΅Ρ‚Π°Π΅Ρ‚ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ†ΠΈΠΈ ΠΈ синхронизации доступа ΠΊ раздСляСмым (совмСстно ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹ΠΌ) ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Ρ„Π°ΠΉΠ»Π°ΠΌ.

Π’ Windows имССтся Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ„Π°ΠΉΠ»Ρ‹ (Ρ†Π΅Π»ΠΈΠΊΠΎΠΌ ΠΈΠ»ΠΈ частично) Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Π½ΠΈΠΊΠ°ΠΊΠΎΠΉ Π΄Ρ€ΡƒΠ³ΠΎΠΉ процСсс (Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‰Π°ΡΡΡ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°) Π½Π΅ смоТСт ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ доступ ΠΊ Π·Π°Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠΌΡƒ участку Ρ„Π°ΠΉΠ»Π°. Π‘Π»ΠΎΠΊΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Ρ„Π°ΠΉΠ»Π° ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΡΡ‚Π°Π²Π»ΡΡ‚ΡŒ Π΄Ρ€ΡƒΠ³ΠΈΠΌ прилоТСниям Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ доступа Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для чтСния (раздСляСмый доступ) ΠΈΠ»ΠΈ ΠΆΠ΅ Π·Π°ΠΊΡ€Ρ‹Π²Π°Ρ‚ΡŒ ΠΈΠΌ доступ ΠΊ Ρ„Π°ΠΉΠ»Ρƒ ΠΊΠ°ΠΊ для записи, Ρ‚Π°ΠΊ ΠΈ для чтСния (ΠΌΠΎΠ½ΠΎΠΏΠΎΠ»ΡŒΠ½Ρ‹ΠΉ доступ). Π§Ρ‚ΠΎ Π½Π΅ΠΌΠ°Π»ΠΎΠ²Π°ΠΆΠ½ΠΎ, Π²Π»Π°Π΄Π΅Π»ΡŒΡ†Π΅ΠΌ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ являСтся Π±Π»ΠΎΠΊΠΈΡ€ΡƒΡŽΡ‰ΠΈΠΉ процСсс. Π›ΡŽΠ±Π°Ρ ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠ° получСния доступа ΠΊ части Ρ„Π°ΠΉΠ»Π° (с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ ReadFile ΠΈΠ»ΠΈ WriteFile) Π² Π½Π°Ρ€ΡƒΡˆΠ΅Π½ΠΈΠ΅ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰Π΅ΠΉ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ закончится Π½Π΅ΡƒΠ΄Π°Ρ‡Π΅ΠΉ, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ носят ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ Ρ…Π°Ρ€Π°ΠΊΡ‚Π΅Ρ€ Π½Π° ΡƒΡ€ΠΎΠ²Π½Π΅ процСсса. Π›ΡŽΠ±Π°Ρ ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠ° получСния нСсовмСстимой Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ Ρ‚Π°ΠΊΠΆΠ΅ Π·Π°Π²Π΅Ρ€ΡˆΠΈΡ‚ΡΡ Π½Π΅ΡƒΠ΄Π°Ρ‡Π΅ΠΉ, Π΄Π°ΠΆΠ΅ Ссли процСсс ΡƒΠΆΠ΅ Π²Π»Π°Π΄Π΅Π΅Ρ‚ Π΄Π°Π½Π½ΠΎΠΉ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΎΠΉ. Π‘Π»ΠΎΠΊΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Ρ„Π°ΠΉΠ»ΠΎΠ² являСтся ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Π½ΠΎΠΉ Ρ€Π°Π·Π½ΠΎΠ²ΠΈΠ΄Π½ΠΎΡΡ‚ΡŒΡŽ синхронизации ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‰ΠΈΡ…ΡΡ процСссов ΠΈ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ²; обсуТдСниС синхронизации с использованиСм Π³ΠΎΡ€Π°Π·Π΄ΠΎ Π±ΠΎΠ»Π΅Π΅ ΠΎΠ±Ρ‰Π΅ΠΉ Ρ‚Π΅Ρ€ΠΌΠΈΠ½ΠΎΠ»ΠΎΠ³ΠΈΠΈ начнСтся Π² Π³Π»Π°Π²Π΅ 8.

Для блокирования Ρ„Π°ΠΉΠ»ΠΎΠ² прСдусмотрСны Π΄Π²Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. Π‘ΠΎΠ»Π΅Π΅ ΠΎΠ±Ρ‰Π΅ΠΉ ΠΈΠ· Π½ΠΈΡ… являСтся функция LockFileEx, ΠΌΠ΅Π½Π΅Π΅ ΠΎΠ±Ρ‰Π΅ΠΉ β€” LockFile, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΈ Π² Windows 9x.

Ѐункция LockFileEx относится ΠΊ классу Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½Π½ΠΎΠ³ΠΎ (extended) Π²Π²ΠΎΠ΄Π°/Π²Ρ‹Π²ΠΎΠ΄Π°, поэтому для указания 64-Π±ΠΈΡ‚ΠΎΠ²ΠΎΠΉ ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΈ Π² Ρ„Π°ΠΉΠ»Π΅ ΠΈ Π³Ρ€Π°Π½ΠΈΡ† области Ρ„Π°ΠΉΠ»Π°, ΠΏΠΎΠ΄Π»Π΅ΠΆΠ°Ρ‰Π΅ΠΉ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡŽ, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ структуру OVERLAPPED, которая Ρ€Π°Π½Π΅Π΅ ΡƒΠΆΠ΅ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΠ»Π°ΡΡŒ ΠΏΡ€ΠΈ ΡƒΠΊΠ°Π·Π°Π½ΠΈΠΈ ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΈ Π² Ρ„Π°ΠΉΠ»Π΅ для Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ ReadFile ΠΈ WriteFile. 

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

Ѐункция LockFileEx Π±Π»ΠΎΠΊΠΈΡ€ΡƒΠ΅Ρ‚ участок ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»Π° Π»ΠΈΠ±ΠΎ для раздСляСмого доступа (Ρ€Π°Π·Ρ€Π΅ΡˆΠ°ΡŽΡ‰Π΅Π³ΠΎ доступ ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ нСскольким прилоТСниям Π² Ρ€Π΅ΠΆΠΈΠΌΠ΅ чтСния), Π»ΠΈΠ±ΠΎ для монопольного доступа (Ρ€Π°Π·Ρ€Π΅ΡˆΠ°ΡŽΡ‰Π΅Π³ΠΎ доступ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄Π½ΠΎΠΌΡƒ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡŽ Π² Ρ€Π΅ΠΆΠΈΠΌΠ΅ чтСния/записи).

ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹

hFile β€” дСскриптор ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»Π°. ДСскриптор Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ создан Π»ΠΈΠ±ΠΎ с ΠΏΡ€Π°Π²Π°ΠΌΠΈ доступа GENERIC_READ, Π»ΠΈΠ±ΠΎ с ΠΏΡ€Π°Π²Π°ΠΌΠΈ доступа GENERIC_READ ΠΈ GENERIC_WRITE.

dwFlags β€” опрСдСляСт Π²ΠΈΠ΄ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ Ρ„Π°ΠΉΠ»Π°, Π° Ρ‚Π°ΠΊΠΆΠ΅ Ρ€Π΅ΠΆΠΈΠΌ оТидания доступности Π·Π°Ρ‚Ρ€Π΅Π±ΠΎΠ²Π°Π½Π½ΠΎΠΉ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ. Π­Ρ‚ΠΎΡ‚ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ опрСдСляСтся ΠΊΠΎΠΌΠ±ΠΈΠ½Π°Ρ†ΠΈΠ΅ΠΉ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ:

LOCKFILE_EXCLUSIVE_LOCK β€” запрос монопольной Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ Π² Ρ€Π΅ΠΆΠΈΠΌΠ΅ чтСния/записи. Если это Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π½Π΅ Π·Π°Π΄Π°Π½ΠΎ, Π·Π°ΠΏΡ€Π°ΡˆΠΈΠ²Π°Π΅Ρ‚ΡΡ раздСляСмая Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠ° (Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‡Ρ‚Π΅Π½ΠΈΠ΅).

LOCKFILE_FAIL_IMMEDIATELY β€” Π·Π°Π΄Π°Π΅Ρ‚ Ρ€Π΅ΠΆΠΈΠΌ Π½Π΅ΠΌΠ΅Π΄Π»Π΅Π½Π½ΠΎΠ³ΠΎ Π²ΠΎΠ·Π²Ρ€Π°Ρ‚Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ с Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΡ‹ΠΌ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ Ρ€Π°Π²Π½Ρ‹ΠΌ FALSE, Ссли приобрСсти Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΡƒ Π½Π΅ удаСтся. Если это Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π½Π΅ Π·Π°Π΄Π°Π½ΠΎ, функция ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΈΡ‚ Π² Ρ€Π΅ΠΆΠΈΠΌ оТидания. 

dwReserved β€” Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ этого ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΡƒΡΡ‚Π°Π½Π°Π²Π»ΠΈΠ²Π°Ρ‚ΡŒΡΡ Ρ€Π°Π²Π½Ρ‹ΠΌ 0. Π‘Π»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ Π΄Π²Π° ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‚ соотвСтствСнно младшиС ΠΈ ΡΡ‚Π°Ρ€ΡˆΠΈΠ΅ 32-Π±ΠΈΡ‚ΠΎΠ²Ρ‹Π΅ значСния Ρ€Π°Π·ΠΌΠ΅Ρ€Π° Π±Π»ΠΎΠΊΠΈΡ€ΡƒΠ΅ΠΌΠΎΠ³ΠΎ участка Ρ„Π°ΠΉΠ»Π° (Π² Π±Π°ΠΉΡ‚Π°Ρ…).

lpOverlapped β€” ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° структуру Π΄Π°Π½Π½Ρ‹Ρ… OVERLAPPED, ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‰ΡƒΡŽ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ Π½Π°Ρ‡Π°Π»Π΅ Π±Π»ΠΎΠΊΠΈΡ€ΡƒΠ΅ΠΌΠΎΠ³ΠΎ участка. Π’ этой структурС Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΡƒΡΡ‚Π°Π½Π°Π²Π»ΠΈΠ²Π°Ρ‚ΡŒ значСния Ρ‚Ρ€Π΅Ρ… элСмСнтов (ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Π΅ элСмСнты ΠΈΠ³Π½ΠΎΡ€ΠΈΡ€ΡƒΡŽΡ‚ΡΡ), ΠΏΠ΅Ρ€Π²Ρ‹Π΅ Π΄Π²Π° ΠΈΠ· ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‚ смСщСниС Π½Π°Ρ‡Π°Π»Π° Π±Π»ΠΎΠΊΠΈΡ€ΡƒΠ΅ΠΌΠΎΠ³ΠΎ участка ΠΎΡ‚ Π½Π°Ρ‡Π°Π»Π° Ρ„Π°ΠΉΠ»Π°.

β€’ DWORD Offset (ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΈΠΌΠ΅Π½Π½ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ имя ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°, Π° Π½Π΅ OffsetLow).

β€’ DWORD OffsetHigh.

β€’ HANDLE hEvent Π΄ΠΎΠ»ΠΆΠ΅Π½ Π·Π°Π΄Π°Π²Π°Ρ‚ΡŒΡΡ Ρ€Π°Π²Π½Ρ‹ΠΌ 0.

Π§Ρ‚ΠΎΠ±Ρ‹ Ρ€Π°Π·Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ„Π°ΠΉΠ», слСдуСт Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ UnlockFileEx, всС ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ, Π·Π° ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ΠΌ dwFlags, ΡΠΎΠ²ΠΏΠ°Π΄Π°ΡŽΡ‚ с ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°ΠΌΠΈ ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅ΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ: 

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

Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Ρ„Π°ΠΉΠ»ΠΎΠ², Π²Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Ρ‚ΡŒ Π²ΠΎ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ ΠΎΠ±ΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΡΡ‚Π²Π°:

β€’ Π“Ρ€Π°Π½ΠΈΡ†Ρ‹ области разблокирования Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π² точности ΡΠΎΠ²ΠΏΠ°Π΄Π°Ρ‚ΡŒ с Π³Ρ€Π°Π½ΠΈΡ†Π°ΠΌΠΈ Ρ€Π°Π½Π΅Π΅ Π·Π°Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠΉ области. НС допускаСтся, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, объСдинСниС Π΄Π²ΡƒΡ… Ρ€Π°Π½Π΅Π΅ Π·Π°Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Ρ… областСй ΠΈΠ»ΠΈ Ρ€Π°Π·Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ части Π·Π°Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠΉ области. Π›ΡŽΠ±Π°Ρ ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠ° разблокирования области, Π½Π΅ ΡΠΎΠ²ΠΏΠ°Π΄Π°ΡŽΡ‰Π΅ΠΉ Π² точности с ΠΎΠ΄Π½ΠΎΠΉ ΠΈΠ· ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… Π·Π°Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Ρ… областСй, Π±ΡƒΠ΄Π΅Ρ‚ Π½Π΅ΡƒΠ΄Π°Ρ‡Π½ΠΎΠΉ. Π’ этом случаС функция Π²Π΅Ρ€Π½Π΅Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ FALSE, Π° Π² Π²Ρ‹Π²Π΅Π΄Π΅Π½Π½ΠΎΠΌ систСмой сообщСнии ΠΎΠ± ошибкС Π±ΡƒΠ΄Π΅Ρ‚ ΡƒΠΊΠ°Π·Π°Π½ΠΎ, Ρ‡Ρ‚ΠΎ данная ΠΎΠ±Π»Π°ΡΡ‚ΡŒ блокирования Π½Π΅ сущСствуСт.

β€’ Π’Π½ΠΎΠ²ΡŒ создаваСмая ΠΈ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ области блокирования Π² Ρ„Π°ΠΉΠ»Π΅ Π½Π΅ ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΠ΅Ρ€Π΅ΠΊΡ€Ρ‹Π²Π°Ρ‚ΡŒΡΡ, Ссли это ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ возникновСнию ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚Π½ΠΎΠΉ ситуации.

β€’ Π’ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ участка, Π³Ρ€Π°Π½ΠΈΡ†Ρ‹ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ выходят Π·Π° ΠΏΡ€Π΅Π΄Π΅Π»Ρ‹ Ρ„Π°ΠΉΠ»Π°. Вакая опСрация ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΠΊΠ°Π·Π°Ρ‚ΡŒΡΡ ΠΏΠΎΠ»Π΅Π·Π½ΠΎΠΉ Π² случаС Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡ Ρ„Π°ΠΉΠ»Π° процСссом ΠΈΠ»ΠΈ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠΌ.