1 perror 定义在头文件<stdlib.h>中
voID perror(const char *s);
函数说明
perror ( )用 来 将 上 一 个 函 数 发 生 错 误 的 原 因 输 出 到 标 准 设备 (stderr) 。参数 s 所指的字符串会先打印出,后面再加上错误原因字符串。此错误原因依照全局变量errno 的值来决定要输出的字符串。 在库函数中有个errno变量,每个errno值对应着以字符串表示的错误类型。当你调用"某些"函数出错时,该函数已经重新设置了errno的值。perror函数只是将你输入的一些信息和现在的errno所对应的错误一起输出。
2 errno 定义在头文件#include <errno.h>
errno是一个全局变量,这里使用不同的数值代表不同场景下出错的原因,当调用linux 系统API 失败时,这时可以根据errno知道失败的大致原因。
在程序代码中包含errno.h,然后每次程序调用失败时系统会自动用用错误代码填充errno,使用方法见下方:
#include <unistd.h>#include <stdio.h>#include <stdlib.h>#include <string.h>#include <fcntl.h>#include <linux/fb.h>#include <sys/mman.h>#include <sys/ioctl.h>#include <errno.h>#define PAGE_SIZE 4096#define TEST_file "/dev/mymap"int main(int argc,char *argv[]){ int fd; int i; unsigned char *p_map; //打开设备 fd = open(TEST_file,O_RDWR); if(fd < 0) { perror("TEST_file"); printf("errno=%d\n",errno); char * mesg = strerror(errno); printf("Mesg:%s\n",mesg); exit(1); } //内存映射 p_map = (unsigned char *)mmap(0,PAGE_SIZE,PROT_READ | PROT_WRITE,MAP_SHARED,fd,0); if(p_map == MAP_Failed) { printf("mmap fail\n"); goto here; } //打印映射后的内存中的前10个字节内容 for(i=0;i<50;i++) printf("%d\n",p_map[i]);here: munmap(p_map,PAGE_SIZE); return 0;}
调用执行结果
总结以上是内存溢出为你收集整理的linux中errno及perror的应用全部内容,希望文章能够帮你解决linux中errno及perror的应用所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)