Toon posts:

[linux] file locking

Pagina: 1
Acties:

Verwijderd

Topicstarter
Hoi iedereen,

Ik moet een scriptje schrijven dat files verplaatst van de ene dir naar de andere. Ik wil dat graag doen wanneer een bestand *helemaal* binnen is. (Een bestand wordt via een SMB share geplaatst in een dir). Deze dir wordt gemonitord door een scripje (gecronned). Hoe kan ik echter controleren of een bestand al helemaal binnen is? Het zou kunnen zijn dat een bestand al wel in een listing aanwezig is,.... maar dat het nog groeit qua bestandsgrootte omdat er nog steeds gekopieerd wordt via de netwerk verbinding....

Bedankt!

  • odysseus
  • Registratie: Augustus 2000
  • Laatst online: 16:17

odysseus

Debian GNU/Linux Sid

Twee manieren:
• Je laat het proces dat het verplaatsen over het netwerk regelt een bestand aanmaken zodra het kopieren gebeurd is. Bijvoorbeeld iets als /tmp/$filename.completed of zo. Vervolgens wacht je in het andere script tot dat bestand er staat.
• Je laat het script zoeken naar een EOF in het bestand. Zolang het nog niet helemaal binnen is zal er geen EOF zijn en blijf je wachten, als hij helemaal binnen is zal je script de EOF vinden en aan de gang gaan.

Leven is het meervoud van lef | In order to make an apple pie from scratch, you must first create the universe.


Verwijderd

Topicstarter
Op donderdag 04 april 2002 16:03 schreef odysseus het volgende:
Twee manieren:
• Je laat het proces dat het verplaatsen over het netwerk regelt een bestand aanmaken zodra het kopieren gebeurd is. Bijvoorbeeld iets als /tmp/$filename.completed of zo. Vervolgens wacht je in het andere script tot dat bestand er staat.
• Je laat het script zoeken naar een EOF in het bestand. Zolang het nog niet helemaal binnen is zal er geen EOF zijn en blijf je wachten, als hij helemaal binnen is zal je script de EOF vinden en aan de gang gaan.
Optie 1 valt helaas af voor mij... Omdat de file gekopieerd wordt door een applicatie (Adobe Distiller).

Optie 2 zou misschien wel kunnen werken. Heeft elke file zo'n EOF? (Ik bedoel elk bestandsformaat?). Het gaat hier met name om Postscript en PDF bestanden....

Bedankt!

  • odysseus
  • Registratie: Augustus 2000
  • Laatst online: 16:17

odysseus

Debian GNU/Linux Sid

EOF betekent 'End Of File', het is een kenteken dat het bestand afgelopen is. In principe heeft elk bestand dan ook een EOF aan het eind (uitgezonderd speciale gevallen als sockets). Schematisch zou je iets als dit moeten doen:
code:
1
2
3
while (!eof())
{ wait(); }
do_something_useful();

Hoe je precies de EOF kunt detecteren hangt geheel van de taal af die je gebruikt, je hebt kans dat de mensen in P&W daar meer over weten.

Leven is het meervoud van lef | In order to make an apple pie from scratch, you must first create the universe.


  • igmar
  • Registratie: April 2000
  • Laatst online: 29-06 18:56

igmar

ISO20022

EOF betekent 'End Of File', het is een kenteken dat het bestand afgelopen is. In principe heeft elk bestand dan ook een EOF aan het eind (uitgezonderd speciale gevallen als sockets). Schematisch zou je iets als dit moeten doen:
code:
1
2
3
while (!eof())
{ wait(); }
do_something_useful();

Hoe je precies de EOF kunt detecteren hangt geheel van de taal af die je gebruikt, je hebt kans dat de mensen in P&W daar meer over weten.
Bovenstaand verhaal klopt niet. EOF is het token dat streams gebruiken om te vertellen dat er niks meer is om te lezen. Bestanden hebben geen EOF teken, de kernel vergelijkt de grootte op disk met de huidige positie van de filepointer. Indien die aan elkaar gelijk zijn is het EOF bereikt.

Een betere optie is om te kijken of het bestand nog gelocked is, en om te kijken of het bestand sinds de vorige access van grootte is veranderd. Locking is de beste optie, indien er een write lock op staat mag je er vanuit gaan dat er nog een applicatie mee bezig is.

  • Stalkert
  • Registratie: Januari 2001
  • Laatst online: 12-06 08:07
Is het misschien niet zo dat een file de status 'locked' heeft wanneer deze nog steeds groeit en dat de status op 'free' komt te staan wanneer de file klaar is en compleet gemoved / gekopieerd is ?

  • deadinspace
  • Registratie: Juni 2001
  • Laatst online: 16-08 16:08

deadinspace

The what goes where now?

Op donderdag 04 april 2002 15:44 schreef razor_harm het volgende:
Ik moet een scriptje schrijven dat files verplaatst van de ene dir naar de andere. Ik wil dat graag doen wanneer een bestand *helemaal* binnen is. (Een bestand wordt via een SMB share geplaatst in een dir). Deze dir wordt gemonitord door een scripje (gecronned). Hoe kan ik echter controleren of een bestand al helemaal binnen is? Het zou kunnen zijn dat een bestand al wel in een listing aanwezig is,.... maar dat het nog groeit qua bestandsgrootte omdat er nog steeds gekopieerd wordt via de netwerk verbinding....
Onder normale omstandigheden kun je de file gewoon moven; het down/uploaden/kopieren gaat dan gewoon verder, de file wordt dan op de nieuwe locatie verder aangevuld (mits de file niet opnieuw geopend wordt).
Op donderdag 04 april 2002 19:50 schreef Stalkert het volgende:
Is het misschien niet zo dat een file de status 'locked' heeft wanneer deze nog steeds groeit en dat de status op 'free' komt te staan wanneer de file klaar is en compleet gemoved / gekopieerd is ?
Nee, dat is in Windows zo, en dat vind ik een van de meest hinderlijke beperkingen van Windows, dat je files maar één keer kunt openen.

  • kenneth
  • Registratie: September 2001
  • Niet online

kenneth

achter de duinen

Op donderdag 04 april 2002 23:13 schreef deadinspace het volgende:

Nee, dat is in Windows zo, en dat vind ik een van de meest hinderlijke beperkingen van Windows, dat je files maar één keer kunt openen.
:?
Niet in mijn Windows hoor ...

* kenneth opent een Access database vijf keer, en daarna een tekstbestand drie keer ... nope, geen probleem :)

Look, runners deal in discomfort. After you get past a certain point, that’s all there really is. There is no finesse here.


Verwijderd

Op donderdag 04 april 2002 23:13 schreef deadinspace het volgende:

Nee, dat is in Windows zo, en dat vind ik een van de meest hinderlijke beperkingen van Windows, dat je files maar één keer kunt openen.
Tja, maar daar is wel over nagedacht! Om maar eens een raam in te gooien: consistentie voor de gebruiker
Pagina: 1