printf and line buffering

Andrew Pamment andrew@mort-os.com
Tue Aug 1 15:54:00 GMT 2006


Hi there,

I have been porting newlib to run on my OS, it runs really well, but I am  
having a problem and can't work out what I am doing wrong.

Trying to write a shell, I want to print "Mort$ " without a line break,  
but printf won't do this. I have been going through the newlib source and  
found some comments, the first was about defaulting to line buffered if I  
don't supply an fcntl system call, so I implemented one, the second was  
that as per ANSI standard ttys are by default line buffered.

I can't work out how to switch line buffering off. I have been tracing the  
system calls to my OS, I have isatty being called (to which my OS responds  
1 (yes)) but no fcntl - so i guess I am not setting flags incorrectly.  
Also, putchar works fine, it puts a char immediatly.

I have tried "setvbuf(stdout, NULL, _IONBF, 0);" but that didn't work,  
searching google I haven't found any answers that work. I also do this, to  
make my tty driver work properly:

   tcgetattr(STDIN_FILENO, &saved);
   t = saved;
   t.c_lflag &= ~ICANON;
   t.c_lflag &= ~ECHO;
   t.c_lflag &= ~ECHOCTL;
   t.c_cc[VMIN] = 1;
   t.c_cc[VTIME] = 0;

The thing is, it compiles and works fine on both cygwin and freebsd.

If anyone has any ideas, or if I need to provide more information, please  
let me know.

Thanks,
Andrew

-- 
Mort - http://www.mort-os.com/



More information about the Newlib mailing list