printf()执行失败时是否设置errno?相关技术问题咨询
关于
printf()执行失败与errno的问题解答 我来给你明确说明这两个问题的答案:
printf()执行失败时是否会设置errno?
答案是肯定的,但要分场景看:在遵循POSIX标准的系统(比如Linux、各类Unix系统)中,当printf()因为I/O相关的原因失败时(比如输出到管道但管道已关闭、磁盘空间不足等),会自动设置errno。不过C标准本身并没有强制要求这一点,但主流的标准库实现(比如glibc)都会遵循POSIX规范来处理。printf()执行失败时,除了返回负值外,是否会将errno设置为合适的值?
是的,当printf()返回负值表示I/O失败时,errno会被设置为对应错误的代码,比如:- 磁盘空间不足时,
errno会被设为ENOSPC - 管道写端被关闭时,
errno会被设为EPIPE - 输出的文件描述符无效时,
errno会被设为EBADF
- 磁盘空间不足时,
需要注意的是,如果printf()的失败是因为格式字符串和参数不匹配这类未定义行为导致的,这时候errno的状态是不确定的,不能依赖它来判断错误类型。只有I/O相关的失败场景,errno的设置才是可靠的。
内容的提问来源于stack exchange,提问作者user13863346
相关产品推荐
相关产品推荐

