首页 > 其他分享 >errno 的使用

errno 的使用

时间:2023-04-19 11:23:44浏览次数:23  
标签:No errno 使用 file error type define

经常在调用linux 系统api的时候会出现一些错误,比方说使用open() 、write() creat()之类的函数有些时候会返回-1,也就是调用失败。这个时候使用errno这个全局变量就相当有用了。

例如:

#include <stdio.h>
#include <string.h>
#include <errno.h>
int main(void)
{
    int fd;
    extern int errno;

    if((fd = open("/dev/dsp",O_WRONLY)) < 0)
    {
        printf("errno=%d\n",errno);
    }
    exit(0);
}

假如 errno=13,则表示文件权限不足,需要提高权限。

以下来自linux 2.4.20-18的内核代码中的/usr/include/asm/errno.h

#ifndef _I386_ERRNO_H
#define _I386_ERRNO_H
#define EPERM 1 /* Operation not permitted /
#define ENOENT 2 / No such file or directory /
#define ESRCH 3 / No such process /
#define EINTR 4 / Interrupted system call /
#define EIO 5 / I/O error /
#define ENXIO 6 / No such device or address /
#define E2BIG 7 / Arg list too long /
#define ENOEXEC 8 / Exec format error /
#define EBADF 9 / Bad file number /
#define ECHILD 10 / No child processes /
#define EAGAIN 11 / Try again /
#define ENOMEM 12 / Out of memory /
#define EACCES 13 / Permission denied /
#define EFAULT 14 / Bad address /
#define ENOTBLK 15 / Block device required /
#define EBUSY 16 / Device or resource busy /
#define EEXIST 17 / File exists /
#define EXDEV 18 / Cross-device link /
#define ENODEV 19 / No such device /
#define ENOTDIR 20 / Not a directory /
#define EISDIR 21 / Is a directory /
#define EINVAL 22 / Invalid argument /
#define ENFILE 23 / File table overflow /
#define EMFILE 24 / Too many open files /
#define ENOTTY 25 / Not a typewriter /
#define ETXTBSY 26 / Text file busy /
#define EFBIG 27 / File too large /
#define ENOSPC 28 / No space left on device /
#define ESPIPE 29 / Illegal seek /
#define EROFS 30 / Read-only file system /
#define EMLINK 31 / Too many links /
#define EPIPE 32 / Broken pipe /
#define EDOM 33 / Math argument out of domain of func /
#define ERANGE 34 / Math result not representable /
#define EDEADLK 35 / Resource deadlock would occur /
#define ENAMETOOLONG 36 / File name too long /
#define ENOLCK 37 / No record locks available /
#define ENOSYS 38 / Function not implemented /
#define ENOTEMPTY 39 / Directory not empty /
#define ELOOP 40 / Too many symbolic links encountered /
#define EWOULDBLOCK EAGAIN / Operation would block /
#define ENOMSG 42 / No message of desired type /
#define EIDRM 43 / Identifier removed /
#define ECHRNG 44 / Channel number out of range /
#define EL2NSYNC 45 / Level 2 not synchronized /
#define EL3HLT 46 / Level 3 halted /
#define EL3RST 47 / Level 3 reset /
#define ELNRNG 48 / Link number out of range /
#define EUNATCH 49 / Protocol driver not attached /
#define ENOCSI 50 / No CSI structure available /
#define EL2HLT 51 / Level 2 halted /
#define EBADE 52 / Invalid exchange /
#define EBADR 53 / Invalid request descriptor /
#define EXFULL 54 / Exchange full /
#define ENOANO 55 / No anode /
#define EBADRQC 56 / Invalid request code /
#define EBADSLT 57 / Invalid slot /
#define EDEADLOCK EDEADLK
#define EBFONT 59 / Bad font file format /
#define ENOSTR 60 / Device not a stream /
#define ENODATA 61 / No data available /
#define ETIME 62 / Timer expired /
#define ENOSR 63 / Out of streams resources /
#define ENONET 64 / Machine is not on the network /
#define ENOPKG 65 / Package not installed /
#define EREMOTE 66 / Object is remote /
#define ENOLINK 67 / Link has been severed /
#define EADV 68 / Advertise error /
#define ESRMNT 69 / Srmount error /
#define ECOMM 70 / Communication error on send /
#define EPROTO 71 / Protocol error /
#define EMULTIHOP 72 / Multihop attempted /
#define EDOTDOT 73 / RFS specific error /
#define EBADMSG 74 / Not a data message /
#define EOVERFLOW 75 / Value too large for defined data type /
#define ENOTUNIQ 76 / Name not unique on network /
#define EBADFD 77 / File descriptor in bad state /
#define EREMCHG 78 / Remote address changed /
#define ELIBACC 79 / Can not access a needed shared library /
#define ELIBBAD 80 / Accessing a corrupted shared library /
#define ELIBSCN 81 / .lib section in a.out corrupted /
#define ELIBMAX 82 / Attempting to link in too many shared libraries /
#define ELIBEXEC 83 / Cannot exec a shared library directly /
#define EILSEQ 84 / Illegal byte sequence /
#define ERESTART 85 / Interrupted system call should be restarted /
#define ESTRPIPE 86 / Streams pipe error /
#define EUSERS 87 / Too many users /
#define ENOTSOCK 88 / Socket operation on non-socket /
#define EDESTADDRREQ 89 / Destination address required /
#define EMSGSIZE 90 / Message too long /
#define EPROTOTYPE 91 / Protocol wrong type for socket /
#define ENOPROTOOPT 92 / Protocol not available /
#define EPROTONOSUPPORT 93 / Protocol not supported /
#define ESOCKTNOSUPPORT 94 / Socket type not supported /
#define EOPNOTSUPP 95 / Operation not supported on transport endpoint /
#define EPFNOSUPPORT 96 / Protocol family not supported /
#define EAFNOSUPPORT 97 / Address family not supported by protocol /
#define EADDRINUSE 98 / Address already in use /
#define EADDRNOTAVAIL 99 / Cannot assign requested address /
#define ENETDOWN 100 / Network is down /
#define ENETUNREACH 101 / Network is unreachable /
#define ENETRESET 102 / Network dropped connection because of reset /
#define ECONNABORTED 103 / Software caused connection abort /
#define ECONNRESET 104 / Connection reset by peer /
#define ENOBUFS 105 / No buffer space available /
#define EISCONN 106 / Transport endpoint is already connected /
#define ENOTCONN 107 / Transport endpoint is not connected /
#define ESHUTDOWN 108 / Cannot send after transport endpoint shutdown /
#define ETOOMANYREFS 109 / Too many references: cannot splice /
#define ETIMEDOUT 110 / Connection timed out /
#define ECONNREFUSED 111 / Connection refused /
#define EHOSTDOWN 112 / Host is down /
#define EHOSTUNREACH 113 / No route to host /
#define EALREADY 114 / Operation already in progress /
#define EINPROGRESS 115 / Operation now in progress /
#define ESTALE 116 / Stale NFS file handle /
#define EUCLEAN 117 / Structure needs cleaning /
#define ENOTNAM 118 / Not a XENIX named type file /
#define ENAVAIL 119 / No XENIX semaphores available /
#define EISNAM 120 / Is a named type file /
#define EREMOTEIO 121 / Remote I/O error /
#define EDQUOT 122 / Quota exceeded /
#define ENOMEDIUM 123 / No medium found /
#define EMEDIUMTYPE 124 / Wrong medium type */
#endif

 

标签:No,errno,使用,file,error,type,define
From: https://www.cnblogs.com/haoran123/p/17332693.html

相关文章

  • 塔猫之ChatPPT 国内一个AI自动生成PPT效率工具【使用后一点想法】
    我有个同事为了肝PPT熬夜到天明,结果第二天就生病了,抵抗力一落千丈啊! 做PPT可真是够折磨人的。我有个同事为了肝PPT熬夜到天明,结果第二天就生病了,抵抗力一落千丈啊!这种情况也真的很常见,毕竟制作一个好的演示文稿需要大量思考、设计、排版和修图等等工序,全程手动操作不仅费时费......
  • sql server的cube操作符使用详解[转]
    sqlserver的cube操作符使用详解cube操作符  要使用cube,首先要了解groupby  其实cube和rollup区别不太大,只是在基于groupby子句创建和汇总分组的可能的组合上有一定差别,  cube将返回的更多的可能组合。如果在groupby子句中有n个列或者是有n个表达式的话,  sqlserv......
  • 使用约束详解[转]
    使用约束1.使用primarykey约束 其值能唯一的标识表中的每一行。这样的一列或多列成为表的主键,通过它可强制表的实体完整性。 job_idintprimarykeyclustered emp_idempidconstraintpk_emp_idprimarykeynonclustered2.使用foreign......
  • TC(teamcenter)临时许可证使用的影响
    格发GFLicOMS本人及公司长期致力于制造业研发软件许可证管理与优化Teamcenter软件是一款全球领先的产品生命周期管理软件,被广泛应用于制造、航空、国防等多个领域。许多企业为了使用Teamcenter软件,都选择购买或使用临时许可证。然而,这种做法可能存在一定的风险和不确定性。TC软件......
  • Git使用详解
    一、安装指引在Mac上安装Git之前,可以先使用git--version来查看一下是否安装了Git,因为Mac系统可能自带了Git,或者在你安装XCode(或者XCode的命令行工具)时,可能已经安装了Git。1.1安装如果尚未安装Git,或者已安装的Git版本过低,这里我们可以去Git官网https://git-scm.com进行安装......
  • Oracle使用expdp数据泵导出多张表
    由于需要导出的表数量较多,这里要用到include参数。一、exclude/include参数用法:   EXCLUDE=[object_type]:[name_clause],[object_type]:[name_clause]  -->排出特定对象   INCLUDE=[object_type]:[name_clause],[object_type]:[name_clause]  -->包含特定对象 ......
  • 我的第一个NPM包:panghu-planebattle-esm(胖虎飞机大战)使用说明
    好家伙,我的包终于开发完啦 欢迎使用胖虎的飞机大战包!!为你的主页添加色彩这是一个有趣的网页小游戏包,使用canvas和js开发使用ES6模块化开发效果图如下: (觉得图片太sb的可以自己改)代码已开源!!Git:https://gitee.com/tang-and-han-dynasties/panghu-planebattl......
  • 在Go语言中,如何优化内存使用效率?
    在Go语言中,可以通过以下几种方式来优化内存使用效率:避免使用过多的内存尽可能地避免使用过多的内存是最有效的内存优化方法之一。在编写代码时,应该尽可能地避免使用全局变量和大量的临时变量。同时,可以使用常量、静态变量和缓存等方式来避免频繁地分配和释放内存。及时释放不......
  • 如何在 vue3 中使用 jsx/tsx?
    我们都知道,通常情况下我们使用vue大多都是用的SFC(SignleFileComponent)单文件组件模式,即一个组件就是一个文件,但其实Vue也是支持使用JSX来编写组件的。这里不讨论SFC和JSX的好坏,这个仁者见仁智者见智。本篇文章旨在带领大家快速了解和使用Vue中的JSX语法,好......
  • 方法使用小练
    方法的重载publicclassDemo02{publicstaticvoidmain(String[]args){intmax=max(10,10);System.out.println(max);}//方法的重载:方法可以重名,但是要参数类型不同publicstaticdoublemax(doublenum1,doublenum2){d......