Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi DOS-LOG Int $5C über Delphi (https://www.delphipraxis.net/42466-dos-log-int-%245c-ueber-delphi.html)

MacGuyver 19. Mär 2005 09:08


DOS-LOG Int $5C über Delphi
 
Moin Leute! :hi:

Ich schreibe hauptsächlich an einer DOS-Anwendung und sorge für den Ausdruck und Abfragen von speziellen Sachen mittels Delphiprogramme. Ob mein Programm schon läuft finde ich heraus, weil ich eine Datei logge und das dann abfrage. Für mich liegt nun das Problem vor, wie ich ein File-Log über Interrupt $5C in Delphi setzen und auslesen kann. Es geht irgendwie über die API. Kann mir da jemand helfen?

Stefan

NicoDE 19. Mär 2005 09:16

Re: DOS-LOG Int $5C über Delphi
 
Zitat:

Zitat von MacGuyver
Ich schreibe hauptsächlich an einer DOS-Anwendung und sorge für den Ausdruck und Abfragen von speziellen Sachen mittels Delphiprogramme.

Delphi16 (1) oder Delphi32 (2-7,9).

Zitat:

Zitat von MacGuyver
Ob mein Programm schon läuft finde ich heraus, weil ich eine Datei logge und das dann abfrage.

Soweit verständlich und üblich...

Zitat:

Zitat von MacGuyver
Für mich liegt nun das Problem vor, wie ich ein File-Log über Interrupt $5C in Delphi setzen und auslesen kann. Es geht irgendwie über die API. Kann mir da jemand helfen?

Was willst Du machen (ich habe keine Ahnung, was INT 5C mit Logs zu tun hat, bzw. warum es überhaupt Interrupts sein müssen...
Ein paar Informationen zur Umgebung und zum Ziel (statt dem Problem) könnten nicht schaden.

Gruß Nico

MacGuyver 19. Mär 2005 09:30

Re: DOS-LOG Int $5C über Delphi
 
Mit dem Interrupt $5C kannst du Dateien byteweise oder sogar ganz sperren. Wenn dann von einer anderen Station aus probiert wird, diese Bytes zu loggen, kommt eine Fehlermeldung zurück. Wenn ich mein DOS-Programm starte logge ich von einer Datei das erste Byte. Wenn es nicht klappt, dann läuft das Programm bereits an einer anderen Station. Auf diese Weise hat jeder Rechner ein eigenes Unterverzeichnis, wo er die Datei logged. Gleichzeitig sperrt es ein doppeltes Ausführen an einer Station. Nun muß ich zwischendurch probieren, ob das Delphi-Programm schon läuft. Wenn ja, dann gut, sonst wird das Programm gestartet. Aus diesem Grund muß ich nun im Delphi-Programm ein Log setzten, das ich vom DOS-Programm aus checken kann. Einfach ein Byte in eine Datei schreiben ist nicht gut, falls das Programm abbricht und das Byte noch gesetzt ist, kann es nicht einfach wieder gestartet werden. Ein Log wiederum wird vom Betriebssystem aus gelöscht und es kann sofort wieder geöffnet werden.

Stefan

NicoDE 19. Mär 2005 09:50

Re: DOS-LOG Int $5C über Delphi
 
Lock-Files kannst Du auch mit der Win32-API CreateFile umsetzen. Ist eine Frage der Flags, z.B.... ohne FILE_SHARE_READ/WRITE damit andere Prozesse die Datei nicht öffnen können, mit OPEN_ALWAYS damit vorhandene Dateien nicht stören, usw.
(bei FILE_FLAG_DELETE_ON_CLOSE bin ich mir nicht sicher, ob es unter Win9x funktioniert, aber das kann man ja ausprobieren...)

Gruß Nico

MacGuyver 19. Mär 2005 10:28

Re: DOS-LOG Int $5C über Delphi
 
Jau, so habe ich das früher immer getan, klappte gut. Bis an einem Abend ich die Kriese bekommen habe. 2x WinXP-Home mittels TCP-IP im Lan. Ich habe die Daten mit $12 geöffnet. Das heißt ich möchte lesen und schreiben, es darf kein anderer lesen und/oder schreiben. An beiden Rechnern wurde die Datei geöffnet, ohne Fehlermeldung. Deshalb benutze ich den Interrupt $5c was dann auch sicher klappt. Nur ein DOS-Rechner oder Win98 nicht durchgestartet im DOS-Mode kennt die Funktion nicht. Habe ich so einen Rechner, dann benutze ich die Methode der File-Locks.

Stefan

NicoDE 19. Mär 2005 10:39

Re: DOS-LOG Int $5C über Delphi
 
Zitat:

Zitat von MacGuyver
Jau, so habe ich das früher immer getan, klappte gut. Bis an einem Abend ich die Kriese bekommen habe. 2x WinXP-Home mittels TCP-IP im Lan.

Offline-Dateien aktiviert? (kann man AFAIK auch per Flags umgehen)

Zitat:

Zitat von MacGuyver
Deshalb benutze ich den Interrupt $5c was dann auch sicher klappt. Nur ein DOS-Rechner oder Win98 nicht durchgestartet im DOS-Mode kennt die Funktion nicht.

Klingt so, als ob Du den Interrupt unter XP verwendest?

MacGuyver 19. Mär 2005 11:37

Re: DOS-LOG Int $5C über Delphi
 
Ja, den benutze ich unter XP. Ab Win95 ist das Teil standardmäßig mit drin. Für den Aufruf über eine Windowsanwendung gibt es so etwas als API, ich meine das schon einmal gesehen zu haben.

MacGuyver 19. Mär 2005 16:58

Re: DOS-LOG Int $5C über Delphi
 
Ich habe die Lösung! Nach einem kurzen Telefongespräch mit meinem Kollegen wußte ich, wie ich weiter machen muß. Danke Markus! In der API sind die Funktionen LockFile und UnlockFile. Mit diesen Funktionen kann man byteweise einen Bereich sperren. Beim einem Versuch einer anderen Station oder einer anderen Anwendung dies Bytes zu loggen, kommt von der Funktion LockFile ein false zurück.

Stefan

Muetze1 19. Mär 2005 16:59

Re: DOS-LOG Int $5C über Delphi
 
Moin!

Mich würde vor allem mal die Funktionsnummer interessieren die du bei INT 5Ch aufrufst. Der Interrupt 5Ch bietet viel, aber was nutzt du davon?

MfG
Muetze1

NicoDE 19. Mär 2005 17:51

Re: DOS-LOG Int $5C über Delphi
 
Zitat:

Zitat von MacGuyver
Ja, den benutze ich unter XP.

Vielleicht ein Mißverständnis meinerseits?
Ich dachte Du verwendest den Interrupt aus einem 32-Bit Delphi-Programm (wenn ja, dann wüßte ich gerne (reine Neugierde) wo Dokumentationen darüber zu finden sind).


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:27 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz