Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

printf flush at program exit

Tags:

c

linux

printf

I'm interested in knowing how the printf() function's flush works when the program exits.

Let's take the following code:

int main(int ac, char **av)
{
    printf("Hi");
    return 0;
}

In this case, how does printf() manage to flush its buffer to stdout?

I guess it's platform dependent, so let's take Linux.

It could be implemented using gcc's __attribute__((dtor)) but then the standard library would be compiler dependent. I assume this is not the way it works.

Any explanations or links to documentation is appreciated. Thank you.

like image 533
Xaqq Avatar asked Jun 21 '13 08:06

Xaqq


1 Answers

When the program exits normally, the exit function has always performed a clean shutdown of the standard I/O library, this causes all buffered output data to be flushed.

Returning an integer value from the main function is equivalent to calling exit with the same value.So, return 0 has the same effect with exit(0)

If _Exit or _exit was called, the process will be terminated immediately, the IO won't be flushed.

like image 130
Yu Hao Avatar answered Oct 04 '22 10:10

Yu Hao