* Bérenger: > When running following code: > > ```C > #include <unistd.h> > #include <stdio.h> > #include <stdlib.h> > > int main() > { > close( STDIN_FILENO ); > close( STDOUT_FILENO ); > int fd = dup( STDERR_FILENO ); > close( STDERR_FILENO ); > if( -1 == fprintf( stdout, "%d\n", fd ) ) > { > return -1; > } > > char s[] = "should fail\n"; > if( -1 == write( STDOUT_FILENO, s, sizeof( s ) ) ) > { > return -2; > } > return EXIT_SUCCESS; > } > ``` > > built with glibc, the program returns 254. When built with muslc, it > returns the expected value of 255. > > I believe glibc's behavior here is wrong. From what I could get by using > strace, it seems that the 1st printf's write() call is ran _after_ the > 2nd one, even when adding a call to fflush( stdout ) right after the > printf.
The reason for the glibc behavior is that stdout ends up as a buffered stream because it is not a terminal. Why do you think this is a bug?