Fehler 104 unter ubuntu bei blockread

Für alles, was in den übrigen Lazarusthemen keinen Platz, aber mit Lazarus zutun hat.
Antworten
Reinhard
Beiträge: 46
Registriert: Fr 26. Sep 2008, 16:56

Fehler 104 unter ubuntu bei blockread

Beitrag von Reinhard »

Hallo,

Ich habe da ein Problem mit lazarus 0.9.24 und blockread unter ubuntu.

Ich versuche mittels blockread eine Datei aus einen verzeichnis zu lesen, bekomme aber jedesmal einen 104 er error
(Connection reset by peer) ???

Der Code stammt noch von Delphi 4 unter Windowsund funktioniert dort auch , nur unter ubuntu/lazarus bekomme ich diesen simplen befehl nicht hin.

Code: Alles auswählen

Type
      fbuffarray      = array[0..65000] of byte;
 
VAR
    ifile   : File;
    ibuf    : fbuffarray;
    ErrCode:Integer;
 
Procedure Form1.test(ifilename:string);
Begin
{$I-}
Assign (ifile,Ifilename);{$I-}reset (ifile,1); // Öffnen funktioniert.
 
blockread (Ifile,ibuf,sizeof(ibuf),br);ErrCode:=IoResult;  
IF ErrCode<>0 Then 
Begin
     // Hier erhalte ich immer einen 104er error , egal welche datei ich nehme 
ENd;
 
end;
Als Dateiname verwende ich z.b. "/home/geist/abc.txt"
welches eine einfach text Datei ist, es ist aber egal welche Datei ich nehme, es funktioneirt mit keiner , egal ob text oder binär Datei.

Es muß irgendwas mit dem Type zu tun haben denke ich mal.

Ich verstehe nicht wieso ich die datei nicht lesen kann, die rechte sind alle auf meinen usernamen gestellt (geist)
also schreiben/lesen/ausführen.

Kann mir da jemand sagen was da fault ist ?

Danke
Zuletzt geändert von monta am Sa 27. Sep 2008, 13:04, insgesamt 1-mal geändert.
Grund: Codetags!

marcov
Beiträge: 1102
Registriert: Di 5. Aug 2008, 09:37
OS, Lazarus, FPC: Windows ,Linux,FreeBSD,Dos (L trunk FPC trunk)
CPU-Target: 32/64,PPC(+64), ARM
Wohnort: Eindhoven (Niederlande)

Re: Fehler 104 unter ubuntu bei blockread

Beitrag von marcov »

Zuerst, im Dokumentation steht:
104 File not open for input
Reported by Read, BlockRead, Eof, Eoln, SeekEof or SeekEoln if the file is not opened with Reset.
Also das oefnen Funktioniert nicht

Auch ist die Code etwas merkwuerdig.
Das normale skelet ist so:
Assign (ifile,Ifilename);
{$I-}reset (ifile,1);{$I+} // Öffnen funktioniert.
if ioresult0 then
// fehler fuer reset
blockread (Ifile,ibuf,sizeof(ibuf),br);
if ioresult0 then
// fehler fuer blockread.
Als Dateiname verwende ich z.b. "/home/geist/abc.txt"
welches eine einfach text Datei ist, es ist aber egal welche Datei ich nehme, es funktioneirt mit keiner , egal ob text oder binär Datei.

Mach ein einfaches Konsole Program, und nutze "strace" um eine Liste der Syscalls zu bekommen. Upload das auf ein Server, und post das URL hier.
Ich verstehe nicht wieso ich die datei nicht lesen kann, die rechte sind alle auf meinen usernamen gestellt (geist)
also schreiben/lesen/ausführen.
Weil die Code nicht logisch ist, sollte es funktionieren, denke ich. Post auch den Riegel von "ls -als" fuer solch ein Datei hier.

(wie zb
132 -rwxr-xr-x 1 marcov users 130780 Nov 12 2006 test

Reinhard
Beiträge: 46
Registriert: Fr 26. Sep 2008, 16:56

Re: Fehler 104 unter ubuntu bei blockread

Beitrag von Reinhard »

OK danke hat sich erledigt, der Fehler war ein zuvor fehlerhafter gesetzter filemode.

Interessanterweise kennt aktzeptiert der compiler den modus FMINPUT
welcher aber scheinbar anders funktioniert als FMRead.

Antworten