Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > comp.unix.programmer > #13643

Re: How to check for error with write(2)

Path csiph.com!fu-berlin.de!uni-berlin.de!individual.net!not-for-mail
From Rainer Weikusat <rweikusat@talktalk.net>
Newsgroups comp.unix.programmer
Subject Re: How to check for error with write(2)
Date Fri, 17 Dec 2021 15:14:18 +0000
Lines 25
Message-ID <87mtkzz2k5.fsf@doppelsaurus.mobileactivedefense.com> (permalink)
References <spfuo5$lb0$1@gioia.aioe.org> <slrnsrnfmu.1rfm.grahn+nntp@frailea.sa.invalid> <sph0n9$1vmq$1@gioia.aioe.org>
Mime-Version 1.0
Content-Type text/plain
X-Trace individual.net pcblQMhQxO2vVAw1MS3x0A/3gDeJDld1aULsv+yAnkg4u/s2U=
Cancel-Lock sha1:xXZgd+WYq1aKX63MlAg0EdThQSE= sha1:YP200h1zz6JkKIku/E1O07xuw5o=
User-Agent Gnus/5.13 (Gnus v5.13) Emacs/24.5 (gnu/linux)
Xref csiph.com comp.unix.programmer:13643

Show key headers only | View raw


Steve Keller <keller.steve@gmx.de> writes:
> Jorgen Grahn <grahn+nntp@snipabacken.se> writes:
>> The OpenBSD one is similar. Are you talking about other Unix-like
>> systems, or are you saying the man page is wrong?  Because it seems to
>> say that in your scenario, the fatal write() will return -1 and set
>> EFBIG.
>
> I should have written more clearly, that I was talking about a "short
> write".  I.e. the write() syscall doesn't return -1 and doesn't set
> errno, but it could only write data partially.
>
> I wasn't saying the man page is wrong, only that an error can occur
> without write() returning -1 to indicate the error.  Repeating the
> write() with the rest of the data to get the error, as Philip
> suggested, was obviously too simple for me to get that idea :-)

write generally needs to be called in a loop until either everything was
written or an error ocurred, subject to whatever special properties the
"output thing" the file descriptor refers to might have (eg, atomicity
of PIPE_BUF writes to a pipe, or preservation of message boundaries by
datagram sockets). But that's possibly not enough to detect errors
reliably: I've encountered people who believed that a write call which
cannot write anything due to the disk being full should return 0 and not
-1 and an ENOSPC error. I don't know if implementations exist which
actually work in this way.

Back to comp.unix.programmer | Previous | Next — Previous in thread | Next in thread | Find similar | Unroll thread


Thread

How to check for error with write(2) Steve Keller <keller.steve@gmx.de> - 2021-12-16 18:58 +0100
  Re: How to check for error with write(2) scott@slp53.sl.home (Scott Lurndal) - 2021-12-16 18:26 +0000
    Re: How to check for error with write(2) Geoff Clare <geoff@clare.See-My-Signature.invalid> - 2021-12-20 13:52 +0000
  Re: How to check for error with write(2) Lew Pitcher <lew.pitcher@digitalfreehold.ca> - 2021-12-16 18:49 +0000
    Re: How to check for error with write(2) Rainer Weikusat <rweikusat@talktalk.net> - 2021-12-16 19:00 +0000
  Re: How to check for error with write(2) Rainer Weikusat <rweikusat@talktalk.net> - 2021-12-16 19:06 +0000
  Re: How to check for error with write(2) Jorgen Grahn <grahn+nntp@snipabacken.se> - 2021-12-16 22:34 +0000
    Re: How to check for error with write(2) Steve Keller <keller.steve@gmx.de> - 2021-12-17 04:38 +0100
      Re: How to check for error with write(2) Rainer Weikusat <rweikusat@talktalk.net> - 2021-12-17 15:14 +0000
      Re: How to check for error with write(2) Jorgen Grahn <grahn+nntp@snipabacken.se> - 2021-12-18 10:25 +0000
  Re: How to check for error with write(2) Philip Guenther <guenther@gmail.com> - 2021-12-16 15:04 -0800
    Re: How to check for error with write(2) Joe Pfeiffer <pfeiffer@cs.nmsu.edu> - 2021-12-16 20:10 -0700
    Re: How to check for error with write(2) Steve Keller <keller.steve@gmx.de> - 2021-12-17 04:35 +0100
      Re: How to check for error with write(2) Philip Guenther <guenther@gmail.com> - 2021-12-18 14:58 -0800
        Re: How to check for error with write(2) scott@slp53.sl.home (Scott Lurndal) - 2021-12-19 16:07 +0000

csiph-web