fwrite on a closed file
Sripathi Kodi
sripathik@in.ibm.com
Fri Feb 24 11:29:00 GMT 2006
Hi,
When fwrite is called on a closed file, it is supposed to return zero as the
number of bytes written. However, glibc does not recognize that the file is
closed. It seems to copy the data to it's buffer and return the number of
bytes written to the application. Error is reported only when number of bytes
to be written is large and hence data is needed to be flushed from glibc
buffers. A simple testcase attached below can demonstrate this problem. fwrite
succeeds and only fflush returns an error.
Do we need to add a check for closed file while writing data to it? If yes,
should the check be in _IO_new_file_xsputn()? Should the check be something
like:
if (!_IO_file_is_open(f)) {
f->_flags |= _IO_EOF_SEEN;
return 0;
}
Testcase:
---------
#include <stdio.h>
#include <errno.h>
main()
{
FILE *fp ;
char buffer[] = "abcdef";
short el_size;
el_size = sizeof(char);
int ret;
extern int errno;
if(!(fp = fopen("abc", "w+b")))
return 1;
fclose(fp);
if ((ret = fwrite((char *)buffer, el_size,6, fp)) != 6)
printf("fwrite Failed!. errno = %d\n", errno);
else
printf("fwrite Success!\n");
if ((ret = fflush(fp)) != 0)
printf("fflush failed. errno = %d\n", errno);
}
Thanks and regards,
Sripathi.
More information about the Libc-alpha
mailing list