[Win32] freopen

Pagina: 1
Acties:

  • Olaf van der Spek
  • Registratie: September 2000
  • Niet online
Ik ben op zoek naar een functie waarmee je write-access kunt aanvragen voor een handle die in eerste instantie met CreateFile als read-only is aangevraagd. Is er zo'n functie?

De file sluiten en daarna openen is minder netjes en zorgt ervoor dat de file 'gekaapt' zou kunnen worden door een ander proces dat net ook die file wil openen.

  • Korben
  • Registratie: Januari 2001
  • Laatst online: 14-11-2025

Korben

() => {};

Niet sluiten en nog een keer CreateFile?

Moet je er wel voor zorgen dat je voor dwShareMode FILE_SHARE_READ en FILE_SHARE_WRITE instelt.

.oisyn: Échte programmeurs haten PHP met een passie. Ben jij soms geen echte programmeur?


  • Soultaker
  • Registratie: September 2000
  • Laatst online: 09-09 11:02
Waarom zou je dezelfde file niet meerdere keren mogen openen in een proces? (Dus opnieuw openen om te schrijven en daarna de oude sluiten). Of zie ik iets over het hoofd?

  • Korben
  • Registratie: Januari 2001
  • Laatst online: 14-11-2025

Korben

() => {};

Op maandag 25 maart 2002 15:10 schreef Soultaker het volgende:
Waarom zou je dezelfde file niet meerdere keren mogen openen in een proces? (Dus opnieuw openen om te schrijven en daarna de oude sluiten). Of zie ik iets over het hoofd?
Nee. Dat kan ook gewoon. Moet je dan wel zo doen:
code:
1
2
3
4
5
6
7
8
9
// open het bestand eerst voor lezen
hFile = CreateFile("bla", GENERIC_READ, FILE_SHARE_READ | FILE_SHARE_WRITE, ...);

// doe er iets mee

// open het bestand nog een keer, ditmaal voor lezen èn schrijven
hNotherFile = CreateFile("bla", GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE, ...);
// sluit het eerste bestand
CloseHandle(hFile);

Als je die FILE_SHARE_xxx niet meegeeft, mag geen enkel proces, inclusief je eigen proces, dat bestand nog een keer openen.

.oisyn: Échte programmeurs haten PHP met een passie. Ben jij soms geen echte programmeur?


  • Soultaker
  • Registratie: September 2000
  • Laatst online: 09-09 11:02
Op maandag 25 maart 2002 15:18 schreef Xenophage het volgende:
Als je die FILE_SHARE_xxx niet meegeeft, mag geen enkel proces, inclusief je eigen proces, dat bestand nog een keer openen.
Ah. Ik dacht dat zulke locks nooit voor je eigen proces golden (ook niet als het bestand zonder die flags geopend is). Weer wat geleerd.

  • Olaf van der Spek
  • Registratie: September 2000
  • Niet online
Het probleem is dat de file eerst wordt geopend met FILE_SHARE_READ, omdat andere processen de file niet mogen wijzigen.

  • Korben
  • Registratie: Januari 2001
  • Laatst online: 14-11-2025

Korben

() => {};

Op maandag 25 maart 2002 15:20 schreef Soultaker het volgende:

[..]

Ah. Ik dacht dat zulke locks nooit voor je eigen proces golden (ook niet als het bestand zonder die flags geopend is). Weer wat geleerd.
Ergens tussen nu en 1993 schreef Microsoft Corporation: :P
dwShareMode
Set of bit flags that specifies how the object can be shared. If dwShareMode is 0, the object cannot be shared. Subsequent open operations on the object will fail, until the handle is closed.
Er staat niet bij dat dat niet geldt voor hetzelfde proces, maar bestanden zijn kernel-objecten. Dus geldt het ook voor je eigen proces. (opdracht: zoek de logica in mijn Nederlands :P)

.oisyn: Échte programmeurs haten PHP met een passie. Ben jij soms geen echte programmeur?

Pagina: 1