zoukankan      html  css  js  c++  java
  • linux中errno及perror的应用

    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
    ",errno);
            char * mesg = strerror(errno);
            printf("Mesg:%s
    ",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
    ");
            goto here;
        }
    
        //打印映射后的内存中的前10个字节内容
        for(i=0;i<50;i++)
            printf("%d
    ",p_map[i]);
    
    here:
        munmap(p_map, PAGE_SIZE);
        return 0;
    }

    调用执行结果 

     

  • 相关阅读:
    详解著名的awk Oneliner,第三部分:选择性输出特定行
    显示特定行
    nWave指令
    make 命令
    VIM脚本变量
    terninal 快捷键
    vim 实现begin end 配对 使用matchit插件
    VIM删除重复行
    linux命令--find(1)
    zabbix--创建触发器
  • 原文地址:https://www.cnblogs.com/noxy/p/11188583.html
Copyright © 2011-2022 走看看