如何在Linux代码中阻塞write()函数使其返回-1?
如何让Linux下的write()返回-1?阻塞/非阻塞I/O都能实现,看你要测啥场景
阻塞I/O下触发失败的常见方式:
- 给已经close掉的文件描述符写数据,此时write会返回-1,errno是EBADF。
- 用只读模式打开的文件描述符(
O_RDONLY)去写,同样返回-1,errno对应权限类错误。 - 写入后文件大小超过系统设置的
RLIMIT_FSIZE限制,write返回-1,errno为EFBIG。 - 往管道写的时候,如果管道的读端已经关闭,默认进程会收到
SIGPIPE直接终止;要是你捕获了这个信号,write就会返回-1,errno是EPIPE。
非阻塞I/O下触发失败的常见方式:
最典型的就是当输出缓冲区被占满时,非阻塞的write不会等待缓冲区腾出空间,直接返回-1,errno设为EAGAIN或者EWOULDBLOCK。另外,上面阻塞模式里的那些错误场景(比如已关闭的fd、只读fd)在非阻塞模式下也一样会让write返回-1。
简单来说:如果要测试缓冲区满时的写入失败逻辑,用非阻塞I/O最直接;如果是测试非法fd、权限限制、资源配额这类错误,阻塞或非阻塞模式都适用,具体看你要覆盖的测试场景。
内容的提问来源于stack exchange,提问作者Sharon Deborah
相关产品推荐
相关产品推荐

