【发布时间】:2014-03-04 01:29:33
【问题描述】:
我正在为通用文件操作编写一个包装器,但不知道如何处理当 write 返回的大小比所提供的更小时的情况。
手册页写着:
例如,如果底层物理介质上的空间不足,或者遇到 RLIMIT_FSIZE 资源限制(参见 setrlimit(2)),或者调用被中断,则写入的字节数可能少于 count。写入少于 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 ?
// ***************
}
【问题讨论】: