`

linux file descriptor错误如何捕获?

阅读更多

在调用linux系统api的时候有时会出现一些错误,比如在open linux device的时候,open失败,return -1,可以使用errno这个全局变量取得错误值。

 

具体在文件头#include <errno.h>

然后在函数中添加  extern int errno;

最后在fd open的case里面printf("errno=%d\n",errno);

#include <stdio.h>
#include <string.h>
#include <errno.h>

int main(void)
{
   int  fd;
   extern int errno;

   if((fd = open("/dev/graphics/fb0",0)) < 0)
  {
     printf("errno=%d\n",errno);
      char * mesg = strerror(errno);
      printf("Mesg:%s\n",mesg); 
    }
}

以下是基于linux-2.6.36.1的errno参数值

#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	/* Argument 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 */
#define	ECANCELED	125	/* Operation Canceled */
#define	ENOKEY		126	/* Required key not available */
#define	EKEYEXPIRED	127	/* Key has expired */
#define	EKEYREVOKED	128	/* Key has been revoked */
#define	EKEYREJECTED	129	/* Key was rejected by service */

/* for robust mutexes */
#define	EOWNERDEAD	130	/* Owner died */
#define	ENOTRECOVERABLE	131	/* State not recoverable */

#define ERFKILL		132	/* Operation not possible due to RF-kill */
 

More details, please refer to http://www.ibm.com/developerworks/cn/aix/library/au-errnovariable/

分享到:
评论

相关推荐

    深入理解linux内核(Understanding The Linux Kernel)

    - **虚拟文件系统框架**:介绍了Linux内核中的虚拟文件系统(Virtual File System, VFS)框架,它是如何抽象和统一各种文件系统的。 - **文件系统实现**:探讨了几种常见文件系统的具体实现,包括ext2、ext3等。 ####...

    Linux环境C_程序设计-612页.zip

    6. **文件I/O操作**:在Linux中,C程序员需要知道如何进行文件的创建、读写、追加和关闭等操作,这通常涉及到file descriptor、文件模式和错误处理。 7. **进程通信**:包括管道、套接字、共享内存、消息队列等,...

    26_TCP_File.rar

    我们可以连接这个信号,捕获错误并采取相应措施,如显示错误信息或尝试重新连接。 为了实现更高级的功能,比如断点续传或进度条,我们还需要跟踪已发送/接收的数据量,这可以通过QAbstractSocket的bytesWritten()和...

    文件拷贝程序

    在拷贝过程中,我们需要使用`open()`来获取源文件和目标文件的文件描述符(file descriptor)。 2. **read()**: 读取文件内容。通过调用`read()`,我们可以从源文件中读取数据到内存缓冲区。 3. **write()**: 写入...

    java.io.FileNotFoundException: *****(Too many open files)

    - 操作系统限制:每个进程可以同时打开的文件描述符(file descriptor)数量是有限制的。当达到这个限制时,再尝试打开新文件就会抛出此异常。 - 缺乏资源管理:在Java中,如果打开文件后没有正确关闭,文件描述符...

    nasm-2.05rc5-win32.zip

    - **错误检查**:它具有严格的错误检查机制,可以在编译阶段捕获许多潜在的问题,提高代码质量。 **2. NASM的使用** - **安装与配置**:下载nasm-2.05rc5-win32.zip后,解压并配置环境变量,将NASM的可执行文件路径...

    MiniShell:这是我的OS课程的最后一个项目的回购,在那里我不得不开发一个迷你Linux Shell

    这需要对文件描述符(file descriptor)和`dup2()`系统调用有深入理解。 7. **管道(Pipes)**:MiniShell可能还实现了简单的管道功能,允许用户通过`|`连接两个命令,使得前一个命令的输出成为后一个命令的输入。这...

    SerialPortUtil.zip

    3. 连接串口:调用`open()`方法建立连接,成功后会返回一个`FileDescriptor`,可以用于后续的数据读写操作。 4. 数据读写:使用`write()`方法发送数据,`read()`方法接收数据。注意,串口通信通常是阻塞式的,确保在...

    Flex文件读取报错示例

    为了解决这个问题,可以将文件放置在允许访问的目录,或者如果是在Adobe AIR环境中,可以通过修改应用程序的部署描述文件(例如,AIR descriptor file)来扩展安全沙箱权限。 3. 竞态条件(Race Condition): 如果...

    APUE读书笔记《UNIX环境高级编程第二版》

    文件描述符filedescriptor** - 文件描述符是文件的引用,通常从0开始编号。 **2. 打开文件:open函数** - `open()`用于打开或创建文件,并返回文件描述符。 **3. 创建新文件:creat函数** - `creat()`创建文件,...

Global site tag (gtag.js) - Google Analytics