struct in file

Gast #1636763
Lesenswert?

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
#1636796
Lesenswert?

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.
#1636970
Lesenswert?

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
Gast #1637162
Lesenswert?

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
#1637180
Lesenswert?

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
}

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren