write
может записывать только из одного смежного массива unsigned char
, который не может быть больше PTRDIFF_MAX
, то есть (во всех реальных системах POSIX, и, возможно, это требуется и для POSIX ...?) равно SIZE_MAX/2
.Таким образом, передача значения, которое будет отрицательным, если его интерпретировать как значение со знаком, для начала является ошибкой программирования - переданный размер не согласуется с доступным пространством в буфере.
В теории readv
и writev
может выполнять операции ввода-вывода больше, чем SIZE_MAX/2
, повторяя одни и те же буферы iov
несколько раз в массиве, но, если я правильно помню, они указывают на сбой, если общий размер будет больше, чем SSIZE_MAX
.