C语言中头文件errno.h是什么含义?包含些什么内容?

C语言中头文件errno.h是什么含义?包含些什么内容?,第1张

errno.h 是C语言C标准函式库里的标头档,定义了通过错误码来回报错误信息的宏。

errno本身是一个整型的全局变量,当使用errno的库函数,在执行出错时,只通过函数返回值哪逗辩返回一个表示出错的标识,如-1或NULL等,具体的出错原因会被赋值到errno中。通过查询errno可以确定具体的出错原因。

在errno.h中定义了一系列常指基见的宏,其形式为

#define EPERM 1 /* Operation not permitted */

可以划分为

1 定义一个宏名,以李缺E开头;

2 定义其值,为一个正整数;

3 一个注释区域,说明该错误号出现时的具体错误内容。

errno.h中的条目因不同编译器的实现而有所区别,一般在100~128条范围内,具体内容可以在编译器的系统标准头文件夹下查看对应文件。

我跟你遇到的是同样的问题,你这个满意答案一点都不具体,下面是我的租岩态解决办法:

1、在编辑myls.c文件时加入#include“apueerror.h”

apueerror.h代码如下(枣此复制粘贴后改弊源为.h后缀的文件)

#include "apue.h"

#include <errno.h> /* for definition of errno */

#include <stdarg.h>/* ISO C variable aruments */

static void err_doit(int, int, const char *, va_list)

/*

* Nonfatal error related to a system call.

* Print a message and return.

*/

void

err_ret(const char *fmt, ...)

{

va_list ap

va_start(ap, fmt)

err_doit(1, errno, fmt, ap)

va_end(ap)

}

/*

* Fatal error related to a system call.

* Print a message and terminate.

*/

void

err_sys(const char *fmt, ...)

{

va_list ap

va_start(ap, fmt)

err_doit(1, errno, fmt, ap)

va_end(ap)

exit(1)

}

/*

* Fatal error unrelated to a system call.

* Error code passed as explict parameter.

* Print a message and terminate.

*/

void

err_exit(int error, const char *fmt, ...)

{

va_list ap

va_start(ap, fmt)

err_doit(1, error, fmt, ap)

va_end(ap)

exit(1)

}

/*

* Fatal error related to a system call.

* Print a message, dump core, and terminate.

*/

void

err_dump(const char *fmt, ...)

{

va_list ap

va_start(ap, fmt)

err_doit(1, errno, fmt, ap)

va_end(ap)

abort() /* dump core and terminate */

exit(1) /* shouldn't get here */

}

/*

* Nonfatal error unrelated to a system call.

* Print a message and return.

*/

void

err_msg(const char *fmt, ...)

{

va_list ap

va_start(ap, fmt)

err_doit(0, 0, fmt, ap)

va_end(ap)

}

/*

* Fatal error unrelated to a system call.

* Print a message and terminate.

*/

void

err_quit(const char *fmt, ...)

{

va_list ap

va_start(ap, fmt)

err_doit(0, 0, fmt, ap)

va_end(ap)

exit(1)

}

/*

* Print a message and return to caller.

* Caller specifies "errnoflag".

*/

static void

err_doit(int errnoflag, int error, const char *fmt, va_list ap)

{

charbuf[MAXLINE]

vsnprintf(buf, MAXLINE, fmt, ap)

if (errnoflag)

snprintf(buf+strlen(buf), MAXLINE-strlen(buf), ": %s",

strerror(error))

strcat(buf, "\n")

fflush(stdout)/* in case stdout and stderr are the same */

fputs(buf, stderr)

fflush(NULL) /* flushes all stdio output streams */

}

2、看到apueerror.h文件里面包含了

#include <errno.h>

#include <stdarg.h>

这2个头文件是吧

然后再把这2个头文件添加到同一个目录下,具体代码如下:

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 */

#end

stdarg.h

#ifndef _STDARG_H_

#define _STDARG_H_

#ifndef RC_INVOKED

#ifndef _VA_LIST_DEFINED

#define _VA_LIST_DEFINED

#endif

#ifndef_VA_LIST

#define _VA_LIST

typedef char* va_list

#endif

#define __va_argsiz(t)

#ifdef__GNUC__

#define va_start(ap, pN)

#else

#define va_start(ap, pN)

#endif

#define va_end(ap)((void)0)

#define va_arg(ap, t)

#endif

#endif

3、最后工作目录里有下面这几个文件就完全没有问题了!

myls.c

apue.h

apueerror.h

errno.h

stdarg.h

dirent.h

搞定收工(dirent.h文件应该有吧,没有照上述方法自己做一个或者网上载个都很方便)


欢迎分享,转载请注明来源:内存溢出

原文地址: https://www.outofmemory.cn/tougao/12132250.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-21
下一篇 2023-05-21

发表评论

登录后才能评论

评论列表(0条)

保存