PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : read probs..



quinte17
28-07-2003, 17:59
hi leutz!

ich öffne eine datei mit

fopen..

du dann mit
int bla = fileno(dateifp);
des ganze ummodeln, weil ich die funktion read und write davon kurz brauche..

aber wenn ich jetzt einen read mache ala

read(bla,&array[i],1);
perror(NULL);

bringt der mir als fehlermeldung einen illegal seek...
was ist da dann falsch??? wenn ich eine lseek auf bla dann mach, bekomm ich sehr sehr sehr komische werte...

mfg

(oder kann daran liegen, dass ich den filepointer an eine function übergebe alla

void xxx(FILE *datei)
{
int bla;
bla = fileno(datei);
...
}

)

anda_skoa
28-07-2003, 18:14
Original geschrieben von quinte17
ich öffne eine datei mit

fopen..

du dann mit
int bla = fileno(dateifp);
des ganze ummodeln, weil ich die funktion read und write davon kurz brauche..


Inwiefern unterscheidet sich read von fread so stark, dass du nicht fread einsetzen kannst?

Ciao,
_

cyneox
28-07-2003, 18:29
du kannst ja nach dem öffnen der datei den dateizeiger am anfang setzen damit du keine fehlermeldung mehr bekommst:
lseek(bla,0L,SEEK_SET);
while(read(bla,&puffer,1)>0)
... //verschiden operationen

quinte17
28-07-2003, 18:55
Original geschrieben von anda_skoa
Inwiefern unterscheidet sich read von fread so stark, dass du nicht fread einsetzen kannst?

Ciao,
_

ich wollte nur nicht innerhalb dieser function zu sehr mischen... weil ich da auch noch write verwende, welches daten überschreibt und nicht wie fwrite daten einfügt...

es lief ja schonmal in einem anderen zusammenhang, aber ich kann mir nicht erklären, warum ich da jetzt probleme hatte (habe)

mfg

quinte17
28-07-2003, 19:00
ich habe nun mein prob erkannt...
ich darf nicht fseek mit lseek und ftell mischen... danke für die antworten!

mfg

quinte17
28-07-2003, 19:08
doch nicht glöst ;(


void fencode(FILE *text, FILE *wave, codeHead *cHead)
{
int tdatei_fp = 0; // für open-funktionen
int wdatei_fp = 0; // für open-funktionen
int fmarker; // merker der leseoperation

char if_filesize[4]; // buffer für die dateigröße

char if_data[8]; // buffer für die wavedaten
char if_input; // buffer für die txt-daten

int i=0,j=0,n=0; // zählvariablen

wdatei_fp = fileno(wave);
lseek(wdatei_fp,(*cHead).lStreamStart,SEEK_SET);

printf("%d bytes verfuegbar\n",(*cHead).lStreamLength/((*cHead).wFrame/(*cHead).wChannels)/8);

printf("wmarker: %d\n",ftell(wave));
printf("tmarker: %d\n",ftell(text));

// dateigröße in einen charbuffer schreiben, damit dass spätere encoden in die datei
// leichter ist
*(int *) if_filesize = (*cHead).filesize;

for(i=0;i<4;i++)
{
for(j=0;j<8;j++)
{
read(wdatei_fp,&if_data[j],1);
perror(NULL);
printf("%d\n",lseek(wdatei_fp,0,1));
}
}
}


perror liefert mir beim 1. durchlauf success, aber dann immer illegal seek ;((( (aber seek wird immer 1 nach oben gesetzt..)

grml

quinte17
29-07-2003, 10:23
so nun hab ich ein wenig gegoogelt, und ein wenig über den illegal seek gefunden...

dies ist ein fehler, der nicht unbedingt einer sein muss... sozusagen eine art warning...

somit hat sich des bei mir auch erledigt...
eine andere frage nun...

wenn ich mein prog mit -Wall compile und der mir dann sagt:

warning: implicit declaration of function `lseek'
warning: implicit declaration of function `read'
warning: implicit declaration of function `write'

was ist damit eigentlich gemeint? versteh ich nicht... (weil des ja so funzt wie es ist)
die warnings bringt er in der obigen function die ich gepostet habe..

mfg

wraith
29-07-2003, 10:32
Original geschrieben von quinte17

wenn ich mein prog mit -Wall compile und der mir dann sagt:

warning: implicit declaration of function `lseek'
warning: implicit declaration of function `read'
warning: implicit declaration of function `write'

was ist damit eigentlich gemeint
Dir fehlt der Header,in denen diese Funktionen deklarriert sind (iirc io.h).

Achja,
>>printf("%d\n",lseek(wdatei_fp,0,1));
Da mußte ich auch erstmal nachlesen,was das eigentlich machen sollte,denn du gibst den dritten Parameter explizit als Zahl an,anstatt einer der definierten Konstanten zu verwenden (SEEK_SET,SEEK_CUR,SEEK,END).

Edit: Wenn du C Code kompilierst,dann ist der korrekte Aufruf
gcc -Wall -ansi -pedantic -ffloat-store