Hallo, ich sehe den Fehler einfach nicht! Ich versuche den Status einer Karte die am PCI-Bus hängt auszulesen. Dazu gibt es eine Funktion die sich "StatusGet" nennt, ein Example ist auch eingefügt: * STATUS Stat; * * StatusGet(hDevice, &Stat); * if (Stat.adc_irq) * printf("ADC Interrupt is active\n"); Allerdingts wird an dieser Stelle nur ein Bit aus der Strukur STATUS ausgelesen. Ich will allerdings das Komplette Reg. auslesen und in ein File speichern, bis jetzt habe ich so versucht es klappt allerdings nicht, in das erzeugte File wird nichts geschrieben. ************************************************************************ ** STATUS Stat; FILE *fdStatus; char fnameTest1[80]; . . main(){ . . sprintf(fnameTest1, "Status"); if(NULL == (fdStatus = fopen (fnameTest1, "a"))) printf ("\nCannot open file %s\n", fdStatus); else for (i=0; i<cycle; i++) { . . . StatusGet(hDevice, &Stat); write(fdStatus,&Stat,sizeof(STATUS)); } close(fdStatus); } ************************************************************************ ** thanks for help
Alibaba schrieb: > bis jetzt habe ich so versucht es klappt allerdings nicht, in das > erzeugte File wird nichts geschrieben. Dann wird dein Programm nie zum write kommen. wenn der write ausgeführt wird, wird auch etwas geschrieben. Im schlimmsten Fall irgendwas. Aber geschrieben wird etwas. Wie hast du festhestellt, dass nichts im File ist? Da es sich hier um Binärdaten handelt, kannst du kein Notepad benutzen, sondern brauchst einen HEX-Editor oder so was ähnliches. Sicherheitshalber solltest du als Modus beim fopen auch "ab" angeben und nicht einfach nur "a" alleine. Du hast schliesslich Binärdaten und keinen Text. NB: Hast du da einen Tippfehler? Sollte das nicht fwrite sein anstelle von write. Aber für fwrite passt die Parameterreihenfolge nicht.
Ich programmiere unter linux und benutze den hexdump um das file auszulesen, hat auch bis jetzt immer geklappt. write?? ja es sollte auch write sein, hat bis jetzt auch immer gut geklappt.
ich glaube ich sehe den wald vor lauter bäumen nicht. Aber trotzdem danke für die schnelle antwort
hab den fehlerfall mal abgefragt: if(-1 == write(fdStatus,&icsStat,sizeof(ICS554_STATUS))) {putchar('a');} es tritt immer ein fehler beim schreiben auf, hab aber keine Idee warum.
Alibaba schrieb: > if(-1 == write(fdStatus,&icsStat,sizeof(ICS554_STATUS))) > {putchar('a');} so ist es natürlich richtig: > if(-1 == write(fdStatus,&Stat,sizeof(STATUS))) > {putchar('a');}
Ich kann dir nur raten: Misch nicht die f.... Funktionen mit den raw Funktionen fopen, fwrite, fread, fclose, fseek bilden eine Familie open, write, read, close bilden eine Familie. Wenn ich mich recht erinnere, benutzen die einen File Handles während die anderen Pointer auf FILE Strukuren übernehmen. Das passt alles nicht wirklich zusammen und eigentlich hätte dein Compiler da furchtbar heulen müssen. http://gd.tuwien.ac.at/languages/c/programming-bbrown/c_075.htm
geändert und eine Familie benutzt: int fh if((fh = open("Status",O_CREAT, O_RDWR)) == -1) putchar('s'); if(-1 == write(fh,&Stat,sizeof(ICS554_STATUS))){putchar('a');} trotzdem kein schreiben auf File möglich
Alibaba schrieb: > geändert und eine Familie benutzt: > > int fh > > > if((fh = open("Status",O_CREAT, O_RDWR)) == -1) putchar('s'); > if(-1 == write(fh,&Stat,sizeof(ICS554_STATUS))){putchar('a');} > > trotzdem kein schreiben auf File möglich Da du unter Linux bist: Berechtigungen zum Erzeugen des Files hast du?
1 | #include <stdio.h> |
2 | |
3 | int main() |
4 | {
|
5 | char fileName[] = "test.dat"; |
6 | FILE * fOutput = NULL; |
7 | unsigned char data[] = { 0x20, 0x21, 0x30, 0x31 }; |
8 | |
9 | fOutput = fopen( fileName, "ab" ); |
10 | if( fOutput ) { |
11 | fwrite( data, sizeof( data ), 1, fOutput ); |
12 | fclose( fOutput ); |
13 | }
|
14 | else
|
15 | printf( "Failed to open File: %s", fileName ); |
16 | }
|
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.