首页
学习
活动
专区
圈层
工具
发布

Linux errno详解

在 Linux 系统中,errno 是一个全局变量,用于表示系统调用或库函数调用出错时的错误码。每当一个系统调用或函数遇到错误时,它会将错误码存储在 errno 变量中。...常见的 errno 错误码errno 错误码是由系统调用或库函数返回的整数值,代表不同类型的错误。错误码的值会在 errno.h> 中定义,并且通常会有对应的字符串描述。...如何使用 errno获取错误码:当一个函数调用失败时,你可以通过 errno 来查看具体的错误码。例如,使用 open() 打开文件失败后,errno 将会被设置为一个相应的错误码。...错误码的描述:你可以使用 perror() 或 strerror() 来打印或获取 errno 错误码的字符串描述。...理解 errno 及其错误码的使用对于调试程序和处理错误非常重要,它是 Linux 编程中的基础之一。https://www.52runoob.com/archives/6797

1.1K10
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    linux网络编程中的errno处理

    在Linux网络编程中,errno是一个非常重要的变量。它记录了最近发生的系统调用错误代码。在编写网络应用程序时,合理处理errno可以帮助我们更好地了解程序出现的问题并进行调试。...通常,在Linux网络编程中发生错误时,errno会被设置为一个非零值。因此,在进行系统调用之后,我们应该始终检查errno的值。...在网络编程中,处理网络连接、连接收发数据等经常会涉及到errno的处理。经过查阅了很多资料,发现没有一个系统的讲解,在不同阶段会遇到哪些errno,以及对这些errno需要如何处理。...连接的读写在 Linux 网络编程中,连接读写阶段可能会遇到以下 errno:EINTR:表示系统调用被中断,可以重新尝试读写EAGAIN 或 EWOULDBLOCK:表示当前没有数据可读或没有缓冲区可写...总结本文介绍了在 Linux 网络编程中处理 errno 的方法。

    6.3K30

    Task之errno

    它可以看到每个Task的基本信息,其中有一列叫做ERRNO。 ? 很多人在看到某个Task的ERRNO不为0时,会担心哪里出了问题。其实单独的ERRNO并没什么事儿,一般都不用管它。...这个时候,就可以使用errno来表示不同的错误分支了。当然了,返回值是整型数的函数,也可以操作这个errno,毕竟每个Task都有自己的TCB。...它可以打印errno代表的含义 ? 接下来看看errno值的组成:errno是一个32bits的数,高16位表示module,低16位表示该module内的错误编号。...module 0预留给了Unix errno。VxWorks使用module 1-500。因此用户可以从501开始定义自己的errno,例如 ?...这时候就可以用errno了 ? 也可以在代码中就把errno打印出来 ? ? 然后看一下semOpen()的函数定义 ? 原来这个errno是因为mode设置的不对,加上它吧 ? 这次正常了 ?

    2.1K30

    关于errno头文件

    errno != EEXISTEEXIST的中文翻译是错误已经存在。也就是说,最近一次系统调用的错误已经存在,可以用来做为判断条件。...errno是个全局变量,在errno.h头文件中定义,用于保存错误码,方便根据错误码来查询出错原因。 这个mkfifo函数创建管道时,如果有已存在的同名管道,就会将errno赋值为EEXIST。...if((mkfifo(FIFO_SERVER,O_CREAT|O_EXCL|O_RDWR)errno!...如果我们用mkfifo()函数创建一个有名管道发生错误(发生错误返回值小于0),但是这个错误不是因为这个管道文件已经存在(有名管道存在再去创建是会出现失败的),而是因为其他原因,这个时候就可以把判断条件写成errno...= EEXIST,它代表这个错误(管道文件)是不存在的,是一个新的错误,当然,这个新的错误会存放在errno中,因为上面说过,errno是保存最近一次的错误。

    2.8K30

    【Linux系统调用API】七、errno()、strerror()、dup()、dup2()

    什么是errno errno可以理解为一个全局变量,它存储了出错信息。...在下面三个路径可以看到errno相关的内容 /usr/include/errno.h /usr/include/asm-generic/errno-base.h /usr/include/asm-generic.../errno.h 我们可以在这些文件中自己定义一些errno,这样可以做到我们自己知道原始错误信息,而打印出来给用户看的是我们希望用户看到的对原始错误的解释。...On error, -1 is returned, and errno is set appropriately....注意:这里的 "hello\ linux" 中,"\ " 使通过转义符把空格的特殊含义去掉,如果不加转义符,shell会把空格分开的内容当作两个字符串,通过转义符就可以实现在字符串中写入空格,这是shell

    58710

    Linux进程控制——Linux进程终止

    前言:前面了解完前面的Linux进程基础概念后,我们算是解决了Linux进程中的一大麻烦,现在我们准备更深入的了解Linux进程——Linux进程控制!...我们主要介绍的Linux进程控制内容包括:进程终止,进程等待与替换,进程程序替换! 本篇主要内容: 重识进程创建 进程退出场景 错误码和退出码 1....返回的是上一个进程的错误码 2.2 C语言的错误码 错误码和退出码: 错误码通常是衡量一个库函数或者是一个系统调用一个函数的调用情况 退出码通常是一个进程退出的时候,他的退出结果 二者都是当失败的时候...,用来衡量函数、进程出错是的出错详细原因 我们用代码来测试一下: #include #includeerrno.h> int main() { // errno 可以返回最近一次错误的错误码...ret = errno; } return ret; } 一旦出现错误,错误码errno就会被系统自动赋值 可以通过错误码来判断代码运行的情况 2.3 进程异常终止

    2.8K10

    【Linux】深入理解进程控制:从创建到终止和进程等待

    错误信息 在C语言中我们通常用一个全局变量来代表最近一个进程的错误码: 当我们创建子进程的时候也有创建失败的时候,所以当创建失败时,我们可以利用errno将错误信息打出,然后返回错误码给父进程。...printf("error code:%d.errstring:%s\n",errno,strerror(errno)); return errno; } return 0;...} 我们来看看错误码的范围: #include #include #include errno.h> #include int main...前面一些都是比较熟悉的错误码,操作不被允许啊,文件找不到啊,还有没有这个进程啊之类的。 比如: 这个的错误码就是2。...还有: 这个的错误码并不是3,是因为kill杀死这个进程失败了,返回1,错误码输出的就是1了。 exit exit在程序的任何地方表示进程结束。

    49010

    【安全函数】calloc_s ():深度对比 calloc 解析

    深耕 Android、Linux、RTOS、通信协议、AIoT、物联网及 C/C++ 等领域,乐于技术交流与分享。欢迎技术交流。...明确错误码返回:不再通过返回NULL隐式表示错误,而是通过errno_t类型返回具体错误码(如EINVAL表示参数无效,ENOMEM表示内存不足),便于精准定位问题。...返回值:errno_t:错误码类型(本质是整数),返回0表示成功,非 0 表示失败(如EINVAL参数无效、ENOMEM内存不足)。 2....若程序需在 Linux、macOS 等平台运行,calloc()仍是更稳妥的选择。...无(仅靠 NULL 判断) 需处理 errno_t 错误码 用 switch-case 区分参数错 / 内存不足 零值参数处理 行为未定义 强制返回 EINVAL 无需额外判断,依赖函数返回 六、示例代码

    10510

    【Linux探索学习】第十七弹——进程终止:深入解析操作系统中的进程终止机制

    代码异常终止 下面我们会对上面的内容做出讲解 四、Linux中的进程终止实现 在Linux操作系统中,进程终止主要通过以下系统调用和信号实现: 4.1 运行完毕且正常终止 4.1.1 使用return...\n"); printf("hello linux\n"); printf("hello linux\n"); printf("hello linux\n"); exit...(20); printf("hello linux\n"); printf("hello linux\n"); } int main()...C/C++中其实还定义了一个叫errno的常量来记录错误码 所以我们就可以将errno常量与strerror函数结合使用,用errno来记录进程的错误码,然后传给strerror函数得到错误信息,比如下面的例子...,strerror(errno)); //errno会记录错误码,将它传到strerror中就可以得到错误信息 ret=errno; //将错误码作为返回值返回,从而让父进程得到返回信息

    1.6K10

    【安全函数】abs_s()与fabs_s()实战指南

    返回值:errno_t类型,本质是一个整数错误码。...返回0表示函数执行成功,计算结果有效;返回非0值表示执行失败,具体错误码含义可通过errno.h>头文件或编译器文档查询(常见错误码如ERANGE表示数值溢出)。...、Linux)、不同编译器对错误码的具体数值定义可能不同。...// 错误示例:直接判断错误码数值(跨平台不兼容) if (err == 22) { // 22可能是Linux下的EINVAL,但Windows下可能不同 printf("参数无效\n");...(错误码) int(计算结果) errno_t(错误码) double(计算结果) 错误处理 支持(溢出、空指针等返回对应错误码) 不支持(溢出等为未定义行为) 支持(无效值、空指针等返回对应错误码)

    14110

    【安全函数】整数转字符串 itoa_s () 安全指南

    , int radix); 前缀为_(微软惯例),sizeInCharacters为缓冲区总字节数,返回errno_t错误码 MinGW(Windows) errno_t itoa_s(int value..., char* buffer, size_t bufsz, int base); 无前缀,bufsz即缓冲区大小,错误码兼容 MSVC C11 Annex K(标准) errno_t itoa_s(int...value, char * restrict s, size_t n, int base); restrict修饰s(确保无别名),n为缓冲区大小,错误码遵循 C11 标准 GCC(Linux) 无内置...错误码(0 = 成功,非 0 = 错误) 返回缓冲区指针(失败返回 NULL,难判断原因) 跨平台性 中等(Windows 平台友好,Linux 需第三方库) 低(GCC 无内置,不同编译器差异大) 效率...面试题 3:为什么 itoa_s () 返回错误码(errno_t)而非缓冲区指针?这种设计的优缺点是什么?

    11510

    【安全函数】C语言字符串安全查找三剑客:strchr_s、strrchr_s、strstr_s解析

    函数原型 errno_t strrchr_s(char const* str, rsize_t strsz, int c, char const** result); 参数、返回值、错误码与strchr_s...无分隔符则返回原路径 } int main() { // 测试不同路径格式 char path1[] = "/home/user/documents/report.pdf"; // Linux...问:如果项目需要同时支持 Windows 和 Linux,如何实现安全字符串函数的跨平台兼容?​​ ​​...errno_t err; // 步骤2:新增错误码变量 // 步骤2:调用strchr_s,新增长度参数sizeof(str) err = strchr_s(...博主简介 byte轻骑兵,现就职于国内知名科技企业,专注于嵌入式系统研发,深耕 Android、Linux、RTOS、通信协议、AIoT、物联网及 C/C++ 等领域。

    13210

    【Linux】进程控制(一):进程的创建和终止

    例如在没有 sudo 权限的情况下使⽤yum;再例如除以 0 等操作也会返回错误码 1 ,对应的命令为 let a = 1/0 130 ( SIGINT 或 ^C )和 143 ( SIGTERM )等终...由于上述的原理加上我们知道error储存最近一次的错误码我们可以得出一个结论:程序运行中发生错误时,可以通过 errno 获取系统错误码,并使用 strerror() 将其转换为可读信息。...; printf("%d: %s\n",errno, strerror(errno)); } else { printf("malloc success\n"); }...return ret; } 结果: 如此我们便能够看到通过 errno 获取系统错误码12并且映射到合适的退出码,并使用 strerror() 将其转换为可读信息:无法分配内存。...11) printf("hello linux, end\n"); printf("hello linux, end\n"); printf("hello linux, end\n"); }

    23210
    领券