Tos
05-10-1999, 21:48
Hallo!
Ich habe festgestellt, wenn man auf einen bereits geschlossenen File Pointer noch mal
ein fclose() macht, stuertzt das Programm mit
einem Segmentation fault ab.
Das heisst nicht dass ich ein fclose() auf eine bereits geschlossene Datei machen will,
aber leider gibt es einige alte Programme die das machen und für die die Sourcen nicht mehr vorhanden sind.
Ich glaube der Fehler liegt in der libc/glibc
Bibliothek.
Ich habe es unter den folgenden Versionen, mit der dazugehoerenden libc/glibc Bibliothek, getestet:
SuSE 5.2 Kernel 2.0.31: kein Absturz
SuSE 6.1 Kernel 2.0.36: Segmentation fault
SuSE 6.1 Kernel 2.2.5 : Segmentation fault
SuSE 6.2 Kernel 2.2.10: Segmentation fault
Kann mir jemand sagen, ob das Problem schon bekannt ist und wie man den Fehler im Linux beheben kann.
Auf vielen anderen Betriebssystemen wie SCO Unix, Solaris, AIX und NCR Unix stuerzt
fclose() nicht ab, sondern gibt EBADF als Fehlerwert zurueck.
Gruß
Thomas
Testbeispielprogramm:
---------------------
#include
int
main( argc, argv )
int argc;
char *argv[];
{
FILE *tos;
if( (tos = fopen( "thomas", "r" )) == NULL )
{
perror( "thomas" );
exit( 1 );
}
fprintf( stderr, "Vor 1\n" ); fflush( stderr );
fclose( tos );
sleep( 3 );
fprintf( stderr, "Vor 2\n" ); fflush( stderr );
fclose( tos );
sleep( 3 );
fprintf( stderr, "Vor 3\n" ); fflush( stderr );
fclose( tos );
sleep( 3 );
fprintf( stderr, "Vor 4\n" ); fflush( stderr );
fclose( tos );
sleep( 3 );
fprintf( stderr, "Vor 5\n" ); fflush( stderr );
fclose( tos );
exit( 0 );
}
Ich habe festgestellt, wenn man auf einen bereits geschlossenen File Pointer noch mal
ein fclose() macht, stuertzt das Programm mit
einem Segmentation fault ab.
Das heisst nicht dass ich ein fclose() auf eine bereits geschlossene Datei machen will,
aber leider gibt es einige alte Programme die das machen und für die die Sourcen nicht mehr vorhanden sind.
Ich glaube der Fehler liegt in der libc/glibc
Bibliothek.
Ich habe es unter den folgenden Versionen, mit der dazugehoerenden libc/glibc Bibliothek, getestet:
SuSE 5.2 Kernel 2.0.31: kein Absturz
SuSE 6.1 Kernel 2.0.36: Segmentation fault
SuSE 6.1 Kernel 2.2.5 : Segmentation fault
SuSE 6.2 Kernel 2.2.10: Segmentation fault
Kann mir jemand sagen, ob das Problem schon bekannt ist und wie man den Fehler im Linux beheben kann.
Auf vielen anderen Betriebssystemen wie SCO Unix, Solaris, AIX und NCR Unix stuerzt
fclose() nicht ab, sondern gibt EBADF als Fehlerwert zurueck.
Gruß
Thomas
Testbeispielprogramm:
---------------------
#include
int
main( argc, argv )
int argc;
char *argv[];
{
FILE *tos;
if( (tos = fopen( "thomas", "r" )) == NULL )
{
perror( "thomas" );
exit( 1 );
}
fprintf( stderr, "Vor 1\n" ); fflush( stderr );
fclose( tos );
sleep( 3 );
fprintf( stderr, "Vor 2\n" ); fflush( stderr );
fclose( tos );
sleep( 3 );
fprintf( stderr, "Vor 3\n" ); fflush( stderr );
fclose( tos );
sleep( 3 );
fprintf( stderr, "Vor 4\n" ); fflush( stderr );
fclose( tos );
sleep( 3 );
fprintf( stderr, "Vor 5\n" ); fflush( stderr );
fclose( tos );
exit( 0 );
}