On 02/21/19 09:22, Rich Felker wrote: > On Thu, Feb 21, 2019 at 10:09:03AM -0500, James Larrowe wrote: >> I'm writing a program that prints a dialogue to the screen and then asks >> for input. In musl, the dialogue does not show before fgets() is called, >> however in glibc it does. That causes a blank prompt and also some >> confusion. Attached is a minimal example and a log. > > This difference is intentional. The specification allows but does not > require that attempting to read from a line-buffered input stream > causes all line-buffered output streams to be flushed. This behavior > was somewhat convenient for old-style input-prompt idioms, but it > doesn't scale with large numbers of files open and deadlocks with some > multi-threaded usage. The portable solution here for applications is > to fflush (not fsync) the particular stream you want flushed. > > Rich FWIW, the only package we've come across where this is a problem is mac-fdisk (which hasn't been updated since 1997 - yes, 22 years ago). We have a patch: https://code.foxkit.us/adelie/packages/blob/master/user/mac-fdisk/flush-stdout.patch Best, --arw -- A. Wilcox (awilfox) Project Lead, Adélie Linux https://www.adelielinux.org