我正在编写一个围绕通用文件操作的包装器,并且不知道如何处理当 write 返回一个较小大小的情况时写入然后提供。
write的手册页说:
写入的字节数可能少于 count,例如,底层物理介质上的空间不足,或者遇到 RLIMIT_FSIZE 资源限制(参见 setrlimit(2)),或者调用被信号处理程序中断后写入少于 count 个字节。(另请参见管道 (7)。)
根据我对上述内容的理解,这是错误(中满)和返回(中断呼叫)的混合。如果我的文件描述符都是非阻塞的,我不应该得到中断情况,那么唯一的原因就是一个错误。我对吗 ?
代码示例:
int size_written = write(fd, str, count);
if (size_written == -1) {
if (errno == EAGAIN) {
// poll on fd and come back later
} else {
// throw an error
}
} else if (size_written < count) {
// ***************
// what should I do here ?
// throw an error ?
// ***************
}