加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Linux > 正文

linux中errno及perror的应用

发布时间:2020-12-13 22:37:06 所属栏目:Linux 来源:网络整理
导读:? 1 perror 定义在头文件stdlib.h中 void perror(const char *s); 函数说明 perror ( )用 来 将 上 一 个 函 数 发 生 错 误 的 原 因 输 出 到 标 准 设备 (stderr) 。参数 s 所指的字符串会先打印出,后面再加上错误原因字符串。此错误原因依照全局变量errn

?

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=%dn",errno);
        char * mesg = strerror(errno);
        printf("Mesg:%sn",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 failn");
        goto here;
    }

    //打印映射后的内存中的前10个字节内容
    for(i=0;i<50;i++)
        printf("%dn",p_map[i]);

here:
    munmap(p_map,PAGE_SIZE);
    return 0;
}

调用执行结果 

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读