分享

LINUX 程序中的错误代码(ZZ)

 changqiong0606 2012-12-26

LINUX 程序中的错误代码(ZZ)

关键词linux    错误代码    errno                                          

标准 errno 值包括:

  • E2BIG:传递给函数的参数列表太长。
  • EACCESS:拒绝访问!运行程序的用户不具有访问文件、目录等的权限。
  • EAGAIN:所要求的资源暂时不可用;如果稍后再尝试此操作,则可能会成功。
  • EBADF:函数尝试使用错误的文件描述符(例如,它不引用打开的文件,或者用于尝试写入以只读方式打开的文件)。
  • EBUSY:请求的资源不可用。例如,在另一个程序正在读取目录时尝试删除该目录。请注意 EBUSYEAGAIN 之间的模糊性;您显然能够稍后在读取程序完成后删除该目录。
  • ECHILDwait()waitpid() 函数尝试等待退出子进程,但所有子项都已经退出。
  • EDEADLK:如果继续请求,则会出现资源死锁。请注意,这与从多线程代码中获得的死锁类型不同——errno 及其相关项一定能够帮助您跟踪到这些。
  • EDOM:输入参数在数学函数的域之外。
  • EEXIST:文件已存在,且这是问题所在。例如,如果使用指定现有文件或目录的路径调用 mkdir()
  • EFAULT:函数参数之一引用了无效的地址。大部分实现均无法检测到此种情况(相反,程序会接收到 SIGSEGFAULT 信号并退出)。
  • EFBIG:请求会导致文件扩展并超过实现所定义的最大文件大小。所定义的最大文件大小通常约为 2GB,但大部分现代文件系统都支持更大的文件,有时要求 64 位版本的 read()/write()lseek() 函数。
  • EINTR:程序中的信号处理程序捕获到函数的执行被某个信号中断,信号处理程序然后按正常方式返回。
  • EINVAL:向函数传递了无效的参数。
  • EIO:发生 I/O 错误;通常会生成此错误以回应硬件问题。
  • EISDIR:您使用了目录参数来调用要求文件参数的函数。
  • ENFILE:已在此进程中打开太多文件。每个进程具有 OPEN_MAX 个文件描述符,您正尝试打开(OPEN_MAX + 1 个)文件。请记住,文件描述符 包括诸如套接字之类的内容。
  • ENLINK:函数调用会导致文件具有超过 LINK_MAX 个的链接。
  • ENAMETOOLONG:您已创建比 PATH_MAX 长的路径名,或者已创建比 NAME_MAX 长的文件名或目录名。
  • ENFILE:系统具有太多同时打开的文件。这应是暂时的情况,且它不太可能发生在现代系统上。
  • ENODEV:没有这样的设备,或者您正尝试在指定设备上执行不适当的操作(例如,不要尝试从旧系列打印机中读取内容)。
  • ENOENT:没有找到这样的文件,或者指定的路径名不存在。
  • ENOEXEC:您已尝试运行无法执行的文件。
  • ENOLCK:没有可用的锁;您已达到系统对文件锁或记录锁的限制范围。
  • ENOMEM:系统内存不足。一般而言,应用程序(和操作系统本身)并不能适当地处理此种情况,因此,需要的 RAM 比预期使用的要多,尤其是在系统无法动态地增加磁盘上交换空间的大小的情况下。
  • ENOSPC:设备上没有剩余空间。您已尝试在已满的设备上写入或创建文件。同样,应用程序和操作系统也不能适当地处理这种情况。
  • ENOSYS:系统不支持该函数。例如,如果在不具有作业控制的系统上调用 setpgid(),则将会接收到 ENOSYS 错误。
  • ENOTDIR:指定的路径名必须为目录,但却不是。此错误与 EISDIR 错误相反。
  • ENOTEMPTY:指定的目录不为空,但它必须为空。请注意, 目录仍包含 . 和 .. 条目。
  • ENOTTY:您已尝试在不支持 I/O 控制操作的文件或特殊文件上执行该操作。例如,不要尝试在目录上设置波特率。
  • ENXIO:您已尝试为不存在的设备在特殊文件上执行 I/O 请求。
  • EPERM:不允许执行此操作;您不具有访问指定资源的权限。
  • EPIPE:您已尝试在不再存在的管道中读取或写入内容。管道链中的程序之一已关闭其流的一部分(例如,通过退出)。
  • ERANGE:您已调用函数,但返回值太大而无法通过返回类型来呈现。例如,如果函数返回 unsigned char 值,但计算的结果为 256 或更多(或者是 -1 或更少),则 errno 将被设置为 ERANGE 且函数会返回一些不相关的值。在此类情况下,检查输入数据以确保其完备性,或在每次调用后检查 errno,这一点很重要。
  • EROFS:您尝试修改存储在只读文件系统(或在只读模式下安装的文件系统)上的文件或目录。
  • ESPIPE:您尝试在管道或“先进先出 (FIFO)”堆栈上查找。
  • ESRCH:您已指定无效的进程 ID 或进程组。
  • EXDEV:您已尝试执行将会跨设备移动链接的操作。例如, UNIX 文件系统并不允许在文件系统之间移动文件(相反,您必须复制文件,然后删除原始文件)。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多