On Mon, 15 Feb 2016 19:22:59 +0300, Alexei Malinin wrote:

> Please tell me can fprintf() set errno to EINTR?

Yes, it is possible but see below.

> I have not found assignments such as "errno=EINTR" in libc sources
> (src/lib/libc/stdio, amd64 OpenBSD-5.6 ) but I'm not sure.
> 
> fprintf()'s man page does not say anything about errno but POSIX.1 says,
> "If an output error was encountered, these functions shall return a
> negative value and set /errno/ to indicate the error."

If a signal handler is installed without the SA_RESTART flag set,
the write(2) system call may fail with errno set to EINTR.  The
fprintf(3) function uses write(2) (deep) under the covers to write
to a file or terminal.  The signal(3) function always sets the
SA_RESTART flag unless siginterrupt(3) has been used to make system
calls interruptible.  If the sigaction(2) system call is used,
SA_RESTART must be explicitly set in sa_flags.

 - todd

Reply via email to