ich habe ein kleines aber widerspänstiges Problem. Und zwar möchte ich eine Funktion anlegen, mit der ich ungepuffert (also mit open, write usw. ) in eine Datei schreiben kann.
Die Funktion bekommt als Parameter den Namen einer anzulegenden Datei und eine einfache Zahl, die in diese Datei zu schreiben ist.
So siehts aus:
Code: Alles auswählen
/* Funktion zum Erzeugen einer Datei, in die die Semaphoren-ID geschrieben wird */
int erzeuge_datei ( const char * datei_name, int sem_id )
{
int datei_descriptor = 0;
char uebergabe_string[3];
int schluessel = sem_id;
if ( ( datei_descriptor = open ( datei_name , O_CREAT | O_EXCL | O_WRONLY, S_IRUSR | S_IWUSR ) ) == -1 )
{
perror ( "Fehler beim Erzeugen der Datei! \n" );
exit ( errno );
}
sprintf ( uebergabe_string, "%d", schluessel );
/*{
perror ( "Fehler bei erzeugen eines Strings \n" );
exit ( errno );
}*/
if ( ( write ( datei_descriptor,uebergabe_string , 3 ) ) == -1 )
{
perror ( "Fehler beim beschreiben der Datei! \n" );
exit ( errno );
}
close ( datei_descriptor );
return ( 1 );
}
Wenn ich die Zeile mit dem sprintf allerdings rausnehme, und die Zahl (sem_id ) direkt in die Datei schreibe, gibt es dieses Problem nicht. Klar daß dann dabei nicht das herauskommt, was man will. In der Datei steht dann ein einfaches kleines 's' was ich auch nicht verstehe ( ach ich sollte noch sagen, daß ich immer eine 42 als Zahl übergebe ). Aber die 42 ist nicht der ASCII-Code für ein kleines 's'.
Weiter ist auch noch zu vermerken, daß die in der Funktion erzeugte Datei nicht mit dieser Funktion gelöscht werden kann:
Code: Alles auswählen
void loesche_datei ( const char * datei_name )
{
if ( ( remove ( "datei_name" ) ) == -1 )
{
perror ( "Fehler beim Loeschen der Datei! \n" );
exit ( errno );
}
}
Gruss Christian