我试图保存errno的值以供以后的评估,但失败了:
#include <stdio.h>
#include <errno.h>
#include <unistd.h>
void main(void)
{
int read_errno;
/* read() operation sets errno */
read(...);
read_errno = errno;
printf("errno was %s\n", strerror(errno));
printf("errno was %s\n", strerror(read_errno));
}这里的结果是:
errno was Stream ioctl timeout
errno was Success为什么我不能将errno的数值保存到变量read_errno
发布于 2021-08-25 09:11:18
对printf或可能strerror本身的调用重置* errno变量,以便第二个printf输出第一个printf的结果,而不是read。好的做法是在任何其他函数调用之前尽快保存它。
正确的例子:
#include <stdio.h>
#include <errno.h>
#include <string.h>
int main(){
errno=EPERM; // An example
int read_errno = errno;
printf("errno was %s\n", strerror(read_errno));
printf("errno was %s\n", strerror(read_errno));
}输出:
errno was Operation not permitted
errno was Operation not permitted*他们不必重置它,而且对strerror的成功调用不能修改它。
https://stackoverflow.com/questions/68919996
复制相似问题