Hi tech@,
I am reading write(2) manual, and come across the following example:
for (off = 0; off < bsz; off += nw)
if ((nw = write(d, buf + off, bsz - off)) == 0 || nw == -1)
err(1, "write");
I am just wondering when the write(2) will return 0? If in some cases,
it will indeed return 0, according to the manual:
> Upon successful completion the number of bytes which were written is
returned. Otherwise, a -1 is returned and the global variable errno is
set to indicate the error.
Because the errno is only set when return value is -1, if write(2)
returns 0, the errno should be an undefined value, and "err(1,
"write");" also won't print correct information.
If write(2) won't return 0, my following patch fixes the example code:
diff --git write.2 write.2
index c1686b1a910..db134959002 100644
--- write.2
+++ write.2
@@ -164,7 +164,7 @@ ssize_t nw;
int d;
for (off = 0; off < bsz; off += nw)
- if ((nw = write(d, buf + off, bsz - off)) == 0 || nw == -1)
+ if ((nw = write(d, buf + off, bsz - off)) == -1)
err(1, "write");
.Ed
.Sh ERRORS
Thanks!
--
Best Regards
Nan Xiao