Datei lesen mit read()
-
Hallo ich hab da ein Problem und zwar möchte ich eine 10MB große Datei Byte für Byte lesen und die Anzahl der ausgeführten read-funkt. herausbekommen.
ich habs mal damit versucht...
main()
{
int fd;
int size = 1;
char Buff[size];
int countRead = 0;fd=open("./datei.reference",O_RDONLY);
while(read(fd,Buff,size)>0)
{
read(fd,Buff,size);
countRead++;if(read(fd,Buff,size)<=0
{
printf("Dateiende...");
break;
}}
printf("%i",countRead);
close(fd);
}
aber anstatt der erwarteten ca 10168000 readaufrufe bekomme ich immer 1325 aufrufe zurück.
weiss jemand vll was da schief läuft danke schon mal gruss CJ
-
Ich zähle da mindestens 3 Aufrufe von read pro einmaliger Erhöhung des Zählers.
Außerdem: Bitte den Code für das Forum nicht abschreiben, sondern Copy&Paste benutzen. Denn nun bin ich mir nicht sicher, ob meine Antwort oben richtig ist oder ob einer deiner anderen Fehler schuld ist. Ich habe jetzt jedenfalls im Kopf alle fehlenden Klammern so gesetzt, wie ich es für richtig halte, habe stillschweigend fread, fopen & Co angenommen und außerdem die Reihenflge der Argumente richtig gedreht. Ob dies aber auch das ist was du da stehen tatsächlich hast, kann ich natürlich nicht sagen.
-
while(1){ countRead++; switch(read(...)){ default: continue; case 0: goto READ_DONE; case -1: goto READ_ERROR; } } READ_DONE: ... READ_ERROR: ...
-
ssize_t bytes_read = read(...); countRead++; switch(bytes_read){ default: printf("%d bytes read in call %d",bytes_read,countRead); continue; ...
-
Vielen Dank für eure Hilfe jetzt kann ich wieder weitermachen. thx
-
OK dumm gelaufen...es funktioniert doch nicht es kommt immer wieder 1324 heraus
kann es vll an der datei liegen es handelt sich um eine .reference datei (kenn mich dabei nich so gut aus) aber als ich meine lösung an einer normalen .txt Datei ausprobiert habe, hat alles wunderbar geklappt.
und an SeppJ: read() und open() sind schon richtig mit fopen,fclose usw. soll nich gearbeitet werden hat glaub ich i-was mit kernelmode oder so zu tun;
-
CarlJohnson schrieb:
kann es vll an der datei liegen es handelt sich um eine .reference datei (kenn mich dabei nich so gut aus) aber als ich meine lösung an einer normalen .txt Datei ausprobiert habe, hat alles wunderbar geklappt.
Ich weiß jetzt nicht, was .reference sein soll, aber falls dies so eine Art Verknüpfungsdatei ist (was der Name vermuten lässt): Dieser Verknüpfung wird nicht gefolgt, es wird die Datei selbst geöffnet.