[Accessibility] Portability of file descriptors and C streams

Samuel Thibault samuel.thibault@ens-lyon.org
Tue Jan 18 06:51:52 PST 2005


Ronald S. Bultje, le mar 18 jan 2005 15:08:55 +0100, a dit :
> On Tue, 2005-01-18 at 13:59, Samuel Thibault wrote:
> > People may then very well use C streams over those file descriptors
> > (thanks to fdopen()) or whatever advanced stream in whatever langage,
> > provided they care about flushing (fflush()).
> 
> You mean fdatasync()? :).

No: that's the work of the operating system to get sure that file
descriptors' data is flushed shortly. When using C streams on top of
file descriptor, you have some trouble if you don't call fflush() as
appropriate:

int fd;
FILE *file;
fd=open(...)
file=fdopen(fd,...);

compare:

fprintf(file,"foo");
write(fd,"bar",3);

and

fprintf(file,"foo");
fflush(file);
write(fd,"bar",3);

In the first case, bar will often be written before foo, because fprintf
wouldn't always flush its output. In the second case, bar is always
written after foo, since fflush() asserts that FILE's buffer were
flushed before write() is done.

Regards,
Samuel


More information about the Accessibility mailing list