Kann festgestellt werden, ob die stdin umgeleitet wurde

Für allgemeine Fragen zur Programmierung, welche nicht! direkt mit Lazarus zu tun haben.
Antworten
alfware17
Beiträge: 214
Registriert: Di 14. Dez 2010, 23:27

Kann festgestellt werden, ob die stdin umgeleitet wurde

Beitrag von alfware17 »

Hallo,

in einem alten Forum zu Turbo Pascal fand ich mal eine Abfrage von 2 Bytes eines "Statusvektors",
die anzeigten, ob die stdin und die stdout eines Programmes beim Aufruf umgeleitet waren oder nicht.

Geht das immer noch, wenn ja wie?

Socke
Lazarusforum e. V.
Beiträge: 3178
Registriert: Di 22. Jul 2008, 19:27
OS, Lazarus, FPC: Lazarus: SVN; FPC: svn; Win 10/Linux/Raspbian/openSUSE
CPU-Target: 32bit x86 armhf
Wohnort: Köln
Kontaktdaten:

Re: Kann festgestellt werden, ob die stdin umgeleitet wurde

Beitrag von Socke »

Wäre hilfreich, wenn du die Lösung hier zumindest verlinken könntest. Dann könntest du sie direkt selbst ausprobieren und dein Ergebnis dazu schreiben.

Ansonsten gilt: Free Pascal bietet von Haus aus keine Möglichkeit. Das muss also betriebssystemabhängig selbst geschrieben werden.

Unter Linux geht das recht einfach: http://stackoverflow.com/questions/1188 ... iptor-in-c
Für Windows könnte man das vielleicht ähnlich machen: http://msdn.microsoft.com/en-us/library ... s.85).aspx
MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein

alfware17
Beiträge: 214
Registriert: Di 14. Dez 2010, 23:27

Re: Kann festgestellt werden, ob die stdin umgeleitet wurde

Beitrag von alfware17 »

Hallo,

der Link und der Tip:
http://mitglied.multimania.de/johnplayer/pas.htm#FRAGE3

Code: Alles auswählen

CONST STDOUT = 1;  { Standardausgabegerät  (Eingabegerät STDIN = 0) }
FUNCTION Umgeleitet:Boolean;
BEGIN
    Umgeleitet := Mem[PrefixSeg:$18+STDOUT] <> STDOUT;
END;
Ergebnisse habe ich keine, da schon der Compiler mault. Ich nutze die Free Pascal IDE 2.44
M.E. ist der Abfragewert nach dem <> auch ein bißchen unsauber, denn eigentlich sollten da Werte 00h oder ffh drinstehen,
aber egal, das kann man ja herausfinden.
Ich scheitere schon daran, daß ich den PrefixSeg nicht kenne. Das ebenfalls entfundene MEM habe ich schon mal gemacht, das sollte gehen.
Zuletzt geändert von Lori am Do 14. Feb 2013, 19:17, insgesamt 1-mal geändert.
Grund: Bitte den Highlighter nutzen

Michl
Beiträge: 2511
Registriert: Di 19. Jun 2012, 12:54

Re: Kann festgestellt werden, ob die stdin umgeleitet wurde

Beitrag von Michl »

Ich glaube, dass das nicht ganz so einfach wird. Dein Beispiel bezieht sich auf Turbo-Pscal (Anfang der 90er). Zum Thema habe ich gefunden:

http://lists.freepascal.org/lists/fpc-p ... 13536.html
http://community.freepascal.org:10000/b ... m_id=24084

Michl

Code: Alles auswählen

type
  TLiveSelection = (lsMoney, lsChilds, lsTime);
  TLive = Array[0..1] of TLiveSelection;  

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 6848
Registriert: So 7. Jan 2007, 10:20
OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
CPU-Target: 32Bit (64Bit)
Wohnort: Burgenland
Kontaktdaten:

Re: Kann festgestellt werden, ob die stdin umgeleitet wurde

Beitrag von af0815 »

Info auf der Seite ganz unten: (letzte Änderung 03.04.1996)

Kurz gesagt: Es wird unter Win32 oder besser, diese Art des Zugriffs nicht mehr unterstützt. WO es noch gehen wird ist, wenn du einen alten Dosextender in einem Emulator zum laufen bekommst. Die Frage ist eher, benötigst du das wirklich, wenn ja zu welchen Zweck. Wenn der Zweck klar ist , ist evenzuell ein anderer Weg zu finden.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

Antworten