Natürlich ist das nicht Pascal aber man kann erkennen, mit welchen Systemaufrufen lsof arbeitet und kann das damit sozusagen in Pascal nachbilden.af0815 hat geschrieben: ↑Di 8. Dez 2020, 11:36Das ist aber nicht nativ Pascal. Ich kenne die meisten Tools auf der Kommandozeile, ich will aber NICHT mit TProcess arbeiten müssen, sondern nur nativ in Pascal. Für STAT gibt es fpstat zum Beispiel.fliegermichl hat geschrieben: ↑Di 8. Dez 2020, 09:29Versuch malDa kann man recht schön sehen welche Systemaufrufe da passierenCode: Alles auswählen
strace lsof
Zugriff auf Datei aus Hintergrundprozess nicht möglich
- fliegermichl
- Lazarusforum e. V.
- Beiträge: 1432
- Registriert: Do 9. Jun 2011, 09:42
- OS, Lazarus, FPC: Lazarus Fixes FPC Stable
- CPU-Target: 32/64Bit
- Wohnort: Echzell
Re: Zugriff auf Datei aus Hintergrundprozess nicht möglich
-
- Beiträge: 825
- Registriert: Mi 3. Jun 2020, 07:18
- OS, Lazarus, FPC: L 2.0.8, FPC Trunk, OS Win/Linux
- CPU-Target: Aarch64 bis Z80 ;)
- Wohnort: München
Re: Zugriff auf Datei aus Hintergrundprozess nicht möglich
Ich glaube fliegermichl meinte damit, dass du schauen könntest was lsof macht (wobei ich ja eher in den Quellcode schauen würde, statt mit strace) und das dann in Pascal so ähnlich nutzen.af0815 hat geschrieben: ↑Di 8. Dez 2020, 11:36Das ist aber nicht nativ Pascal. Ich kenne die meisten Tools auf der Kommandozeile, ich will aber NICHT mit TProcess arbeiten müssen, sondern nur nativ in Pascal. Für STAT gibt es fpstat zum Beispiel.fliegermichl hat geschrieben: ↑Di 8. Dez 2020, 09:29Versuch malDa kann man recht schön sehen welche Systemaufrufe da passierenCode: Alles auswählen
strace lsof
FPC Compiler Entwickler
- af0815
- Lazarusforum e. V.
- Beiträge: 6199
- 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: Zugriff auf Datei aus Hintergrundprozess nicht möglich
Sorry, aber das ist mir zu hoch https://github.com/lsof-org/lsof und https://github.com/strace/strace. C ist nicht meine Spezialität, deswegen bin ich bei Pascal
Damit wird das mit Exceptions gemacht. Für eine einfache Absicherung mache ich sicher keine Doktorarbeit. Notfalls ein einfaches Open mittels FD, Leseversuch und Close FD. Das ganze schön mit Exception umgrenzt. Gehts ist es Ok, schmeisst es eine Exception, auch schön, dann ist Datei nicht bereit.
Damit wird das mit Exceptions gemacht. Für eine einfache Absicherung mache ich sicher keine Doktorarbeit. Notfalls ein einfaches Open mittels FD, Leseversuch und Close FD. Das ganze schön mit Exception umgrenzt. Gehts ist es Ok, schmeisst es eine Exception, auch schön, dann ist Datei nicht bereit.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).
- Winni
- Beiträge: 1577
- Registriert: Mo 2. Mär 2009, 16:45
- OS, Lazarus, FPC: Laz2.2.2, fpc 3.2.2
- CPU-Target: 64Bit
- Wohnort: Fast Dänemark
Re: Zugriff auf Datei aus Hintergrundprozess nicht möglich
Hi!
Das geht noch einfacher. Mit dem IOresult
Winni
Das geht noch einfacher. Mit dem IOresult
Code: Alles auswählen
var f : file,
io : integer:
....
{$I- }
assignFile(f,'DateiName');
reset (f);
io := ioresult;
closefile (f);
{$I+}
if io = 0 then showMessage ('OK') else showMessage ('IoError '+IntToStr(io));
....
Winni
- af0815
- Lazarusforum e. V.
- Beiträge: 6199
- 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: Zugriff auf Datei aus Hintergrundprozess nicht möglich
Und was ist der Vorteil gegenüber einer Behandlung mit try except ? Vor allen tritt das ja nicht immer auf. Vor allen, lese ich die Daten nicht selbst, sondern verwende image1.LoadFromFile.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).
- Maik81SE
- Beiträge: 308
- Registriert: Fr 30. Sep 2011, 14:07
- OS, Lazarus, FPC: Debian 12 (L 3.0.0.3 FPC 3.2.2); Windows 10 (L 3.99.0.0 FPC 3.2.0)
- CPU-Target: x86-64; arm; avr
- Wohnort: Lübeck
- Kontaktdaten:
Re: Zugriff auf Datei aus Hintergrundprozess nicht möglich
Vielleicht nur ein blauer Gedanke...
Schon mit dem Gedankener einer LoadFromStream-Routine gespielt?
So nach dem motto, warum nicht als Stream behandeln?
Code: Alles auswählen
label.caption:= 'gnublin.no-ip.info'
windows 10 (L 3.99.0.0 FPC 3.2.0)
- af0815
- Lazarusforum e. V.
- Beiträge: 6199
- 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: Zugriff auf Datei aus Hintergrundprozess nicht möglich
Weil es mich nicht interessiert. Ich will das Bild anzeigen. try except ist so wie es aussieht die Möglichkeit ohne es weiter zu verkomplizieren. Wozu es jetzt extrem aufblasen.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).
- Winni
- Beiträge: 1577
- Registriert: Mo 2. Mär 2009, 16:45
- OS, Lazarus, FPC: Laz2.2.2, fpc 3.2.2
- CPU-Target: 64Bit
- Wohnort: Fast Dänemark
Re: Zugriff auf Datei aus Hintergrundprozess nicht möglich
image1.LoadFromFile gibt's nicht. Das geht immer noch übers picture:
image1.picture LoadFromFile
Macht er doch schon. Implizit.
LoadFromFile ruft LoadFromStream auf.
Source lesen macht schlau.
Winni
-
- Beiträge: 1224
- Registriert: So 20. Mär 2016, 22:14
- OS, Lazarus, FPC: Win7-64bit Laz1.9.0 FPC3.1.1 für Win, RPi, AVR embedded
- CPU-Target: Raspberry Pi 3
Re: Zugriff auf Datei aus Hintergrundprozess nicht möglich
Hm, hab ich für meinen Telegram-Bot gemacht. Der scannt auf Anfrage Dateien und gibt deren Inhalt wieder. Ist die Datei nicht lesbar, versucht er es dreimal, Exception ist drumrum. Trotzdem schmiert der Bot regelmäßig nach einiger Zeit ab, weil irgendwelche Kollisionen auftreten und das Abfangen nicht klappt.af0815 hat geschrieben: ↑Di 8. Dez 2020, 17:00Damit wird das mit Exceptions gemacht. Für eine einfache Absicherung mache ich sicher keine Doktorarbeit. Notfalls ein einfaches Open mittels FD, Leseversuch und Close FD. Das ganze schön mit Exception umgrenzt. Gehts ist es Ok, schmeisst es eine Exception, auch schön, dann ist Datei nicht bereit.
Ich hab da auch noch keine dauerhafte Lösung dafür.
- af0815
- Lazarusforum e. V.
- Beiträge: 6199
- 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: Zugriff auf Datei aus Hintergrundprozess nicht möglich
Bei mir schmiert nichts ab. Ich sehe auch keine Änderung beim Speicherverbrauch. Das ist stabil, Die Gefahr ist, wenn er mit einer Exception aussteigt, das ev. Resourcen gebunden bleiben. Das ist soweit ich es überblicke bei mir Ok.Timm Thaler hat geschrieben: ↑Di 8. Dez 2020, 22:59Ist die Datei nicht lesbar, versucht er es dreimal, Exception ist drumrum. Trotzdem schmiert der Bot regelmäßig nach einiger Zeit ab, weil irgendwelche Kollisionen auftreten und das Abfangen nicht klappt.
@winni: ja, korrekt es geht über die picture Eigenschaft.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).
- fliegermichl
- Lazarusforum e. V.
- Beiträge: 1432
- Registriert: Do 9. Jun 2011, 09:42
- OS, Lazarus, FPC: Lazarus Fixes FPC Stable
- CPU-Target: 32/64Bit
- Wohnort: Echzell
Re: Zugriff auf Datei aus Hintergrundprozess nicht möglich
Ich hab das jetzt mal ausprobiert. Kleines Programm an der Console getippt und laufen lassen:
Dann in der Bash folgenden Befehl: (strace schreibt seine eigene Ausgabe nach stderr)
Dann die Ausgabe geöffnet und nach "test.txt" gesucht. Da fand ich u.a. folgendes:
lsof scheint als auch mit stat und lstat zu arbeiten. Warum das dann so umständlich über /proc/xxx gehandhabt wird, weiss ich nicht. Dafür kenn ich mich zu wenig mit den Linuxinterna aus.
Code: Alles auswählen
{$mode objfpc}
program test1;
uses sysutils;
var f : file;
begin
AssignFile(f, 'test.txt');
ReWrite(f, 1);
write('File opened (Press Enter)');
ReadLn;
CloseFile(f);
end.
Code: Alles auswählen
strace lsof test.txt 2> teststat.txt
Code: Alles auswählen
readlink("/proc/4511/fd/3", "/home/michael/test.txt"..., 4096) = 22
lstat("/proc/4511/fd/3", {st_mode=S_IFLNK|0700, st_size=64, ...}) = 0
stat("/proc/4511/fd/3", {st_mode=S_IFREG|0664, st_size=0, ...}) = 0
open("/proc/4511/fdinfo/3", O_RDONLY) = 7
fstat(7, {st_mode=S_IFREG|0400, st_size=0, ...}) = 0
mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7ff20763e000
read(7, "pos:\t0\nflags:\t0100002\n", 1024) = 22
close(7) = 0
-
- Beiträge: 825
- Registriert: Mi 3. Jun 2020, 07:18
- OS, Lazarus, FPC: L 2.0.8, FPC Trunk, OS Win/Linux
- CPU-Target: Aarch64 bis Z80 ;)
- Wohnort: München
Re: Zugriff auf Datei aus Hintergrundprozess nicht möglich
Das procfs enthält die Informationen über die laufenden Prozesse und bei jedem laufendem Prozess ist enthalten welche Dateideskriptoren offen sind und worauf sie sich beziehen. Es ist die einzige Möglichkeit wie man herausfinden kann, was ein anderer Prozess offen hat.fliegermichl hat geschrieben: ↑Mi 9. Dez 2020, 11:00lsof scheint als auch mit stat und lstat zu arbeiten. Warum das dann so umständlich über /proc/xxx gehandhabt wird, weiss ich nicht. Dafür kenn ich mich zu wenig mit den Linuxinterna aus.
FPC Compiler Entwickler
- fliegermichl
- Lazarusforum e. V.
- Beiträge: 1432
- Registriert: Do 9. Jun 2011, 09:42
- OS, Lazarus, FPC: Lazarus Fixes FPC Stable
- CPU-Target: 32/64Bit
- Wohnort: Echzell
Re: Zugriff auf Datei aus Hintergrundprozess nicht möglich
Also iteriert lsof durch /proc/xx bis es einen Link auf test.txt findet und liest dann die entsprechenden Parameter aus?
- Winni
- Beiträge: 1577
- Registriert: Mo 2. Mär 2009, 16:45
- OS, Lazarus, FPC: Laz2.2.2, fpc 3.2.2
- CPU-Target: 64Bit
- Wohnort: Fast Dänemark
Re: Zugriff auf Datei aus Hintergrundprozess nicht möglich
Hi!
Zusätzlich zu PacalDragons Infos ist zu sagen, dass der Weg über das proc fs der letzte - und manchmal der einzige - Weg ist, um einen gelockten file eines gecrashten oder verstorbenen process zu löschen. Da kommt man mit einem simplen rm nicht weiter. Egal wieviele Parameter.
Ich gebe zu : etwas umständlich. Aber wenn man's verstanden hat sehr hilfreich.
Winni
Zusätzlich zu PacalDragons Infos ist zu sagen, dass der Weg über das proc fs der letzte - und manchmal der einzige - Weg ist, um einen gelockten file eines gecrashten oder verstorbenen process zu löschen. Da kommt man mit einem simplen rm nicht weiter. Egal wieviele Parameter.
Ich gebe zu : etwas umständlich. Aber wenn man's verstanden hat sehr hilfreich.
Winni
- Winni
- Beiträge: 1577
- Registriert: Mo 2. Mär 2009, 16:45
- OS, Lazarus, FPC: Laz2.2.2, fpc 3.2.2
- CPU-Target: 64Bit
- Wohnort: Fast Dänemark
Re: Zugriff auf Datei aus Hintergrundprozess nicht möglich
Hi:
Bye the way:
Das proc fs ist die "Linux-Wunderwaffe" aus der man alles, aber auch (fast) alles auslesen kann.
Und wer meint, er weiss, was er tut, der darf dort auch Werte setzen.
Z.b. den TCP KeepAlive Wert auf 10 Minuten (=600 Sekunden) setzen:
Und wer genug Zeit hat, darf mal staunen, was seine CPU so alles kann.
Steht in
Winni
Bye the way:
Das proc fs ist die "Linux-Wunderwaffe" aus der man alles, aber auch (fast) alles auslesen kann.
Und wer meint, er weiss, was er tut, der darf dort auch Werte setzen.
Z.b. den TCP KeepAlive Wert auf 10 Minuten (=600 Sekunden) setzen:
Code: Alles auswählen
echo 600 > /proc/sys/net/ipv4/tcp_keepalive_time
Steht in
Code: Alles auswählen
/proc/cpuinfo