Kezdőoldal » Számítástechnika » Programozás » Pascal program Windows alatt...

Pascal program Windows alatt rendben működik, Linux alatt bizonyos esetekben nem ad kimenetet, mi lehet ennek a magyarázata? (bővebben lent)

Figyelt kérdés

Pascal-ban írtam egy programot, amely szisztematikusan teszteli a puffert: beolvassa egy pufferméretttel a fájlt, majd növeli a pufferméretet, amíg egy határt el nem ér, ekkor kilép a program...

Linux alatt bizonyos nagyságú fájlok esetén nem kapok kimenetet egyáltalán, akkor sem, ha a text fájlt kiveszem a programból és > jellel szeretném megkapni a kimenetet (fájlba irányítom), 0 byte marad a kimenet akoris ha a program lefut, órákig tesztel...

Pár kb-os fájlok esetén korrekten megjelenik a kiemnet...

A helyzet a következő: Linux nincs a gépre ténylegesen telepítve, hanem Boot Live CD-ről fut, feltelepítettem az fp-compiler csomagot, mount-oltam egy NTFS fájlrendszert tartalmazó külső merevlemezt a /mnt alá és ezen teszteltem egy DVD méretű fájllal.

Ha a kimenetet a /root/kimenet.txt-be mentem, akkor is hiába, 0 byte...

Windows alatt minden korrekten, normálisan működik, a program elindításának pillanatában már rögtön nem 0 byte a kimenet.txt file mérete, hiszen beleírja a bájt számot, tehát rögtön növekednie kell...


Eljátszottam egyébként "file of string"-gel is a text fájl helyett ezt a játékot, ami azt eredményezte, hogy egyetlen kimeneti érték került eltárolásra...

Meglehetősen értetlenül állok azelőtt hogy esetlegesen ezt mégis mi okozhatja...

A root fájlrendszeren - mivel a memóriában fut - ezért csak kis fájlokkkal tesztelhettem, mert nagyobbb nem férne el, egy 500 megás fájl esetén a kimenet korrenten megjelent...

Na jó mondjuk egy gigással még tesztelhettem volna, ha a /dev/null-ba írom a kimenetet...



Tehát, mi a hiba?


Uses SysUtils;

Const

mb = 1048576;

Var

data : array [1..64*mb] of Byte;

dt,dt2 : TDateTime;

nr,nw : Longint;

inf,outf: File of Byte;

meddig : Byte;

mennyit : Longint;

f : Text;

Begin

Assign(inf,paramstr(1));

Assign(outf,paramstr(2));

Reset(inf);

Rewrite(outf);

Assign(f,'/root/kimenet.txt');

ReWrite(f);

mennyit := mb Div 2;

meddig := 0;

Repeat

Seek(inf,0);

Writeln(f,mennyit,' byte:');

dt := Now;

While Not Eof (inf) Do

Begin

BlockRead(inf,data,mennyit,nr);

BlockWrite(outf,data,nr,nw);

End;

seek(outf,0);

dt2:=now;

Writeln(f,'Eltelt ido: ',(DT2-DT)*24*3600:0:2,' sec');

Inc(meddig,2);

mennyit := mb * meddig;

Until(meddig =36);

Close(inf);

Close(outf);

Close(f);

End.



2015. febr. 7. 16:14
 1/3 tabaki ***** válasza:

Én mindössze annyit változtattam a programodon, hogy a fájlműveleteknél illendőségből beraktam az ellenőrző direktívákat, és tessék-lássék megpróbáltam kezelni az esetleges IO-problémákat, illetve nem a rootba küldtem az kimenet.txt fájlt, csak a program mellé. Azt hiszem, ez a lényegen semmit sem változtat. Itt a kód:

[link]

Egy háromszáz megás meg egy 1.6 fájlon kipróbálva, amennyire meg tudom ítélni, semmi rendellenesség nem mutatkozott futtatáskor. Itt a két kimenet:

[link]

[link]

Ha ez hasonlít arra, amit elvársz, akkor valószínű, hogy a sajátos futtatási körülmények okozhatják a problémát, nálam okosabbtól kérdezd, hogyan. Én Linux Mint 14.04 rendszeren fordítottam és futtattam.

2015. febr. 8. 01:19
Hasznos számodra ez a válasz?
 2/3 ejbenjaro ***** válasza:
Vedd figyelembe, hogy a live rendszer a memóriába csomagolja ki magát. Ha memóriaigényes programot futtatsz lehetnek gondok vele.
2015. febr. 8. 12:58
Hasznos számodra ez a válasz?
 3/3 A kérdező kommentje:

Nagyon köszönöm a válaszokat.

Coopper javasolta a flush(f); alkalmazását és ez volt a nyerő. :-)

2015. febr. 8. 13:20

Kapcsolódó kérdések:




Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!