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;
    }

    调用执行结果 

     

  • 相关阅读:
    107. Binary Tree Level Order Traversal II
    108. Convert Sorted Array to Binary Search Tree
    111. Minimum Depth of Binary Tree
    49. Group Anagrams
    使用MALTAB标定实践记录
    442. Find All Duplicates in an Array
    522. Longest Uncommon Subsequence II
    354. Russian Doll Envelopes
    opencv 小任务3 灰度直方图
    opencv 小任务2 灰度
  • 原文地址:https://www.cnblogs.com/noxy/p/11188583.html
Copyright © 2011-2022 走看看